我有一個自定義的ListView類(從ListView中分類),我需要它添加一個小填充到最終視圖元素的底部,這樣它就不會與我所跨過的小酒吧重疊屏幕的底部。我只想在子視圖越過listview的可見區域時執行此操作。我想利用這個代碼來實現這一目標:ListView getFirstVisiblePosition getFirstVisiblePosition getCount values
@Override
protected void onLayout (boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
// If there are hidden listview items we need to add a small padding to the last one so that it
// partially hidden by the bottom sliding drawer handle
if (this.getLastVisiblePosition() - this.getFirstVisiblePosition() + 1 > this.getCount()) {
LinearLayout v2 = (LinearLayout) this.getChildAt(this.getCount() - 1);
v2.setPadding(v2.getPaddingLeft(), v2.getPaddingTop(), v2.getPaddingRight(),
v2.getPaddingBottom() + 5);
}
}
然而,getLastVisiblePostion(),getFirstVisiblePostion()和getCount將()返回的值反映不出什麼適配器持有呢。我假設這是因爲適配器尚未通知數據的ListView,但我無法弄清楚ListView實際知道數據的位置,因此具有正確的值。該代碼正在加載活動時運行。
在渲染過程的哪個點我可以訪問這些數據?我還應該說,我使用AsyncTask從數據庫加載數據,然後在那裏創建Adapter並將其添加到列表視圖。是否有一個事件可以在ListView中使用,當適配器添加數據時會觸發事件/導致列表視圖呈現新項目?
感謝您的回覆,但仍然有同樣的問題。我認爲問題在於,當onLayout被調用時,適配器尚未告知有關項目的視圖。當添加這些數據時,是否有某種類型的數據可以插入? – 2011-12-25 05:49:51
當您在ListView上設置適配器時,您是否嘗試將'mHeight'設置回'-1'?從它聽起來,你第一次繪製完成後填充列表的方式,這意味着計算出的高度可能是'0',並且在您實際設置數據時不準確。因此你需要更新它。據我所知,沒有特定的事件可以使用。如果是這樣,上述代碼中的解決方法將不是必需的。 – 2011-12-25 06:09:40