[英]Android ListView - divider after nth element
我需要在由mysqli游標生成的列表視圖中的第n個元素之后放置一個分隔符。 我創建了嘗試執行此操作的自定義適配器,如下所示:
MyAdapter extends CursorAdapter {
...
blablabla
yadayadayada
...
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View view;
int pos = cursor.getPosition();
int beforeLast = GameData.totalPlayers-1;
if (pos == beforeLast) {
view = mInflater.inflate(R.layout.player_details_divider, parent, false);
} else {
view = mInflater.inflate(R.layout.player_details, parent, false);
}
return view;
}
}
因此,正如您所看到的,它應該為位置totalPlayers-1上的元素增加不同的視圖。 當數字足夠小(1到6)時,它會很好用。但是,當數字更大時,它就會停止工作。
我嘗試調試該東西,然后發現它呈現了6個項目(這是屏幕上適合放置的列表元素的數量),並經過6次循環,將pos遞增到5。然后停止。 當我開始滾動列表時,它將再次運行循環,將pos遞增至6,然后停止。 不管有多少個元素,它都永遠不會將pos遞增到7(盡管列表中存在所有數據,所以必須將游標迭代到最后)。
任何想法為什么它會這樣? 我沒有理解/做錯什么?
問題似乎是由於ListView
回收。 ListView
將嘗試為項目重復使用相同的視圖。 因此,在您的情況下, newView
前6個可見項調用newView
,並且在滾動ListView
時,將為列表中的下6個項調整相同的6個視圖的大小。
您需要更新ListView
,您有2個不同的項目視圖,以便它知道您的最后一個項目視圖與其他視圖不同
您需要override
getViewTypeCount
並返回您有2個不同的視圖
@Override
public int getViewTypeCount() {
return 2; // return the view type
}
另外, override
getItemViewType
並通知ListView
last position view
是一個不同的last position view
。
Override
public int getItemViewType(int position){
int beforeLast = GameData.totalPlayers-1;
// return a unique number
if(beforeLast == position) {
return 1; // some unique id
}else {
return 0;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.