亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

getItemViewType 僅在 onBindViewHolder 中返回

getItemViewType 僅在 onBindViewHolder 中返回

月關寶盒 2022-09-07 17:07:50
我有一個RecyclerView適配器,它應該根據返回的內容膨脹4種不同的布局。getItemViewType觸發視圖時應返回每個視圖類型,但問題是其中一個類型不在 onCreateViewHolder 中返回,而僅在 onBindViewHolder 中返回,從而阻止創建 ViewHolder。另外,我向您保證只返回正確的數據大小,因此這應該不是問題所在。getItemCount我認為如果視圖類型可以成功返回,那么它們在調用時應該會顯示在兩個方法中。所以這個問題對我來說沒有任何意義。@NonNull@Overridepublic HorizontalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {    Log.d(SLIDER_TAG, "onCreateViewHolder: " + getItemViewType(i));    View cardView = LayoutInflater.from(parent.getContext()).inflate(                    getItemViewType(i) == 0 ? R.layout.item_category_slider_viewed                    : getItemViewType(i) == 1 ? R.layout.item_category_slider_added                    : getItemViewType(i) == 2 ? R.layout.item_category_slider_browse_all                    : R.layout.item_category_slider_regular            , parent, false);    return new HorizontalViewHolder(cardView, context);}記錄時,只有 0、1 和 3 會在 內部返回,但不會返回 2。getItemViewType(i)onCreateViewHolder但奇怪的是,在 內部記錄該日志會返回從 0 到 3 的所有視圖類型。為什么會這樣呢?onBindViewHolder編輯RecyclerView顯示一個水平的卡片列表(約20個),而除最后一個卡片(空白)之外的所有卡片都使用相同的布局,因此在此特定列表案例中僅使用2種視圖類型,我們現在可以忽略其他2種類型。這里最后一張牌沒有充氣,因此從未在.我懷疑雖然前許多卡使用相同的布局進行膨脹,但布局不會再次創建,因此它假設最后一張卡使用相同的布局。onCreateViewHolder
查看完整描述

1 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

問題可能是因為您正在重新檢查具有 內部的項ViewType。您不應該這樣做,因為已經從其參數中為您提供了 itemViewType。您應該使用開關大小寫,而不是使您的代碼更具可讀性。getItemViewType(i));onCreateViewHolderonCreateViewHolderif ? :


因此,請將代碼更改為如下所示的內容:


@Override

public HorizontalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {


    int layoutId;

    switch(viewType) {

       case 0:

         layoutId = R.layout.item_category_slider_viewed;

       break;

       case 1:

         layoutId = R.layout.item_category_slider_added;

       break;

       case 2:

         layoutId = R.layout.item_category_slider_browse_all;

       break;

       default:

         layoutId = R.layout.item_category_slider_regular;


    }


    View cardView = LayoutInflater.from(parent.getContext()).inflate(

                    layoutId, parent, false);


    return new HorizontalViewHolder(cardView, context);

}


查看完整回答
反對 回復 2022-09-07
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號