当前位置: 首页 > 知识库问答 >
问题:

RecyclerView适配器更改列表滚动中的选定位置

郜德容
2023-03-14

recyclerview.adapter中,我需要更改每个行列表中的favicon,即在选择每个位置后才指定的行favicon更改。

所有的事情都是正确的,但当滚动回收视图,所选行的位置会自动改变!

这是我的适配器类:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private ItemData[] itemsData;
Activity activity;

public MyAdapter(Activity activity, ItemData[] itemsData) {
    this.activity=activity;
    this.itemsData = itemsData;
}

@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
    View itemLayoutView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_layout, null);

    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {

    viewHolder.txtViewTitle.setText(itemsData[position].getTitle());
    viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl());
    viewHolder.imgViewIcon.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!viewHolder.isFav) {
                Toast.makeText(activity,"Selected Row : "+position,Toast.LENGTH_SHORT).show();
                viewHolder.isFav = true;
                viewHolder.imgViewIcon.setImageResource(R.drawable.icon_fav);
            } else {
                viewHolder.imgViewIcon.setImageResource(R.drawable.pre_ic_ab_drawer);
                viewHolder.isFav = false;
            }
        }
    });


    if (viewHolder.isFav)
        viewHolder.imgViewIcon.setImageResource(R.drawable.icon_fav);

}

public static class ViewHolder extends RecyclerView.ViewHolder {

    public TextView txtViewTitle;
    public ImageView imgViewIcon;
    public Boolean isFav=false;

    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);
        txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
        imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
    }
}

@Override
public int getItemCount() {
    return itemsData.length;
}
 } 

我在输出中看到的:

正如所看到的,我选择了第一行图标,但滚动RecyclerView后,选择的位置改变了。

然后尝试使用更改faviconimgviewicon.setonclicklistenerOnCreateViewWholder中的位置再次错误!

我也看到了这个解决方案:获取点击的项目及其在RecyclerView中的位置

共有1个答案

东方琪
2023-03-14

如果选择了element,请尝试使用模型itemdata[]itemsdata;保存。

例如。

        if (itemsData[position].isFav){

                viewHolder.imgViewIcon.setImageResource(R.drawable.icon_fav);
         }else{

                viewHolder.imgViewIcon.setImageResource(R.drawable.pre_ic_ab_drawer);
         }


viewHolder.imgViewIcon.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (!itemsData[position].isFav) {
                            Toast.makeText(activity,"Selected Row : "+position,Toast.LENGTH_SHORT).show();
                            itemsData[position].isFav = true;
                            viewHolder.imgViewIcon.setImageResource(R.drawable.icon_fav);
                        } else {
                            viewHolder.imgViewIcon.setImageResource(R.drawable.pre_ic_ab_drawer);
                            itemsData[position].isFav = false;
                        }
                    }
                });
 类似资料:
  • 问题内容: 我有一个RecyclerView,每个元素代表一个事件。我想让用户通过单击选择事件。选择后,事件和报告按钮将变为彩色: 进行点击之前的用户界面:点击此处。 用户界面执行单击后:单击此处。 这非常简单,并且据称有效。我为每个负责为项目着色的对象设置了一个,并在触发时触发了名为的拥有活动中的另一个事件,该事件负责更改按钮的状态。 但是,滚动浏览RecyclerView的项目时,其他不相关的

  • AdapterClass: 提前感谢你的帮助。

  • 我有一个CardView项目的RecolyerView列表。然后我使用一个带有SearchView小部件的简单筛选方法来筛选列表。然后,当我单击一个经过过滤的CardView启动CardViewDetails活动时,UI显示的是原始列表中的CardView,而不是经过过滤的列表。例如,我有一个列表,在原来的列表中有二十个项目。当我输入搜索约束时,筛选的列表在RecyclerView中正确地显示了三

  • 本文向大家介绍Android RecyclerView适配器中的数据绑定,包括了Android RecyclerView适配器中的数据绑定的使用技巧和注意事项,需要的朋友参考一下 示例 也可以在RecyclerView适配器中使用数据绑定。 资料模型 XML布局 转接器类别            

  • 我正在创建聊天应用程序,我想每秒刷新一次数据,但问题是recyclerview scroll重置了它们的第一个位置。如何摆脱这个。提前感谢:) 我使用MySql sserver添加和获取数据。

  • 我在stackoverflow上读到了几个解决这个问题的问题,但我无法解决我的问题。recyclerview显示网络视图。我的问题是适配器最初加载了正确的值(下图): 但当我向下滚动并再次向上滚动到第一个位置时,webview中会显示错误的值(下图): 我认为这个问题可能源于之前开始加载到webview 中,但我不知道如何处理此行为。以下是我的代码的相关部分: 任何帮助是值得赞赏的。 更新:在我的