簡體   English   中英

Android ListView-第n個元素后的分隔線

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM