簡體   English   中英

onBindViewHolder 未觸發回收站視圖中的項目

[英]onBindViewHolder not triggering for items in recycler view

我有一個包含 10 個項目的回收站視圖。 我滾動到頁面底部,現在我正在嘗試為第一個項目調用notifyItemChanged(pos) ,因為我向下滾動后該項目不可見。 當我調用它時,它不會觸發第一項的onBindViewholder() 所以簡而言之,我的問題是當我使用未顯示在屏幕上的 position 調用notifyItemChanged(pos)時,它不會觸發onBindViewHolder()嗎? 這是我的適配器代碼

@SuppressLint("NewApi")
    @Override
    public void onBindViewHolder(@NonNull final UserTasksViewHolder holder, final int position) {
        if (usertasks != null) {
            final UserSessionTasksEntity current = usertasks.get(position);
            viewPos = prefs.getString(view_position, "");
            holder.taskCode.setText(current.getTaskCode());
            holder.taskName.setText(current.getTaskName());
    }

    @Override
    public int getItemCount() {
        if (usertasks != null)
            return usertasks.size();
        return 0;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

您的錯誤在於您的 onItemCount 方法。 NotifydatasetChanged 為您的 usertasks 中的每個項目調用 onBindViewHolder,並一直到您的 usertasks.size。 將您的 onGetItemCount 更改為:

@Override
public int getItemCount() {
    if (usertasks != null)
        return usertasks.size();
    else{
       return 0;
    }
     
}

現在,只要您的 usertasks 不是 null,您的 notifyDatasetChanged 就會調用 onBindViewHolder。 如果仍然沒有調用,請查找您的用戶任務,因為它可能是 null

首先在recycler視圖適配器class中創建一個方法,喜歡更新:

public void setData(ArrayList<GridItem> newitems,int pos){ // this is new array
        this.mydata=newitems;//here you update your orignal data
        this.notifyItemChanged(pos);//here notify the change at particular position

    }

在您的片段 class 中:

//get your recyclerview  adapter and call the above method
adapter.setData(newdata,position);

我能夠解決這個問題。 問題是永遠不會為已經回收的項目觸發綁定視圖持有者。 由於我的邏輯是在綁定視圖持有者中編寫的,因此它不起作用,而是我更新了片段中的列表並調用了 notifyDataSetChanged。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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