ListView在ScrollView裡只顯示單行

2021-08-08 10:17:49 字數 1782 閱讀 1867

文章參考:

scrollview是常用的滑動顯示內容的控制項,有時為了適應設計需求裡面會包含諸多態別的內容控制項,比如textview、imageview、listview等混合使用;而在使用listview時,最後執行往往發現listview只顯示一行,listview中所有的item只能在乙個item高度下顯示,效果很差。

究其原因是因為:原本listview的高度是設定adapter之後去自適應高度的(不放在scrollview裡面的話listview會縱向平鋪),但是放在scrollview之後scrollview需要測量裡面所有子控制項的高度並設定,但是這一步是布局資源的操作,沒有考慮listview通過adapter載入多少條資料,因此預設認為listview裡面只有一條內容,所以造成了此問題。

解決方法:listview設定adapter之後,根據載入的資料條數手動設定listview的高度(一般在xml檔案中listview高度都是設定為wrap_content),這時候scrollview就不得不重新測量而擴大高度了。

ps. 當然,若scrollview裡只有listview的話就沒必要用scrollview了,listview自帶滑動。

**如下:

public

class

mainactivity

extends

activity ;

listview.setadapter(new arrayadapter(this,android.r.layout.******_list_item_1,adapterdata));

setlistviewheightbasedonchildren(listview);

}

public

void

setlistviewheightbasedonchildren(listview listview)

int totalheight = 0;

for (int i = 0, len = listadapter.getcount(); i < len; i++)

viewgroup.layoutparams params = listview.getlayoutparams();

params.height = totalheight+ (listview.getdividerheight() * (listadapter.getcount() - 1));

// listview.getdividerheight()獲取子項間分隔符占用的高度

// params.height最後得到整個listview完整顯示需要的高度

listview.setlayoutparams(params);

}

}

另一種解決方法就是自定義listview控制項,重寫它的onmeasure方法就可以了

**如下:

public

class

mylistview

extends

listview

public

mylistview(android.content.context context,android.util.attributeset attrs)

@override

public

void

onmeasure(int widthmeasurespec, int heightmeasurespec)

}

在ListView中巢狀ListView的事件處理

前天在工作中遇到在listview中的item需要用listview來展現處理後的內容,然後就遇到了乙個很頭疼的問題,作為item的listview沒法進行滑動,而且顯示也不正常,只是顯示幾個子item。不能將子item全部顯示,原因是在控制項繪製出來之前要對listview的大小進行計算,要解決將...

游標查詢scroll

scroll查詢 可以用來對 elasticsearch 有效地執行大批量的文件查詢,而又不用付出深度分頁那種代價。游標查詢允許我們 先做查詢初始化,然後再批量地拉取結果。這有點兒像傳統資料庫中的 cursor 游標查詢會取某個時間點的快照資料。查詢初始化之後索引上的任何變化會被它忽略。它通過儲存舊...

scroll事件詳解

以前眼高手低,不夠紮實,面試的時候總是處理過,卻想不出來細節,這次開始慢慢整理,蝸牛繼續爬坡 一般情況下,如果出現內容大於瀏覽器的時候,需要新增樣式 overflow scroll 關於scroll的樣式有以下可以根據需求調整 滾動條的設定 1.webkit scrollbar 滾動條整體部分,可以...