android 删除后回收器视图未更新

6ojccjat  于 2023-01-03  发布在  Android
关注(0)|答案(2)|浏览(140)

这是我的删除代码

public void onBindViewHolder(@NonNull final favAdapter.ViewHolder holder, int position) {
    holder.favText.setText(favlist.get(position).getPoetry());
    holder.delbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            DataBaseHandler db= Room.databaseBuilder(holder.delbtn.getContext(),
                    DataBaseHandler.class, "room_db").allowMainThreadQueries().build();
            Dao_Class userDao= db.userDao();
            userDao.delete(favlist.get(position));

            favlist.remove(position);
            notifyItemRemoved(position);
        }
    });
    
}

我试图获取适配器位置,但无法获取。

wlwcrazw

wlwcrazw1#

您必须使用holder.getAdapterPosition()来处理用户点击,而不是使用position
ViewHolder为我们提供了getAdapterPosition,它始终具有此Holder的更新适配器位置。这意味着每当您单击一个项目(ViewHolder项目)时,我们都会询问适配器其位置。因此,您将获得此项目在适配器逻辑方面的最新位置。

iq0todco

iq0todco2#

您必须通过应用rangeChanged方法删除项目位置和通知列表

public void onBindViewHolder(@NonNull final favAdapter.ViewHolder holder, int position) {
    holder.favText.setText(favlist.get(position).getPoetry());
    holder.delbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            DataBaseHandler db= Room.databaseBuilder(holder.delbtn.getContext(),
                    DataBaseHandler.class, "room_db").allowMainThreadQueries().build();
            Dao_Class userDao= db.userDao();
            userDao.delete(favlist.get(position));

            favlist.remove(position);
            notifyItemRemoved(position);
            notifyItemRangeChanged(position, favlist.size());

        }
    });
    
}

相关问题