【问题标题】:how to update data in recyclerview item from another item?如何从另一个项目更新 recyclerview 项目中的数据?
【发布时间】:2017-12-18 17:18:44
【问题描述】:

我对@9​​87654322@ 有疑问,我有RecyclerView,它有一个radio button,每个行项中的其他视图很少,

我真正想要的是,当用户检查RadioButton 时,我想取消选中其他RadioButton(如果之前检查过任何内容)。因为它是Recyclerview,所以我不能使用radiogroup。

在适配器onBindViewHolder 中,我为每个单选按钮编写了这个监听器

  holder.radioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            selectedPosition = holder.getAdapterPosition();
            Toast.makeText(activity, "section: " + selectedPosition, Toast.LENGTH_SHORT).show();
        }
    });

如何取消选中之前选中的单选按钮?
换句话说,如何从另一个项目视图侦听器更新特定项目的 recyclerview 中的视图属性?

【问题讨论】:

标签: android android-recyclerview radio-button


【解决方案1】:

您需要在适配器中全局引用 selectedItem,然后在用户选中新单选按钮时更新所有项目。

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
    private int selectedItemPosition = -1;
}

并在适配器的onBindViewHolder() 方法中执行操作,

@Override
public void onBindViewHolder(final Adapter.ViewHolder holder, int position) {
    holder.radioButton.setChecked(holder.getAdapterPosition()==selectedItemPosition);
    holder.radioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            selectedItemPosition = holder.getAdapterPosition();
            notifyDataSetChanged();
        }
    });
}

【讨论】:

  • 好的,它工作正常,但是当我更新所有项目并且 recyclerview 有大量数据时会延迟几秒钟?
  • recyclerview 不会一次更新列表中的所有项目。顾名思义,Recyclerview 不会在列表中渲染甚至绘制尽可能多的项目,它只会重用视图。当它们进入显示屏幕时,每个项目都会得到更新。所以不用担心滞后。
  • 啊,我明白了,感谢您的解释和澄清
【解决方案2】:

试试这个::

        if (position == selectedPosition) {
            holder.radioButton.setChecked(true);
            Toast.makeText(activity, "section: " + selectedPosition, Toast.LENGTH_SHORT).show();
        } else {
            holder.radioButton.setChecked(false);
        }

        holder.radioButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selectedPosition = holder.getAdapterPosition();
                notifyDataSetChanged();
            }
        });

【讨论】:

  • 我在@Sanjay Majoka 给我的链接中找到了我的请求,但谢谢这是另一个很好的答案,它对我有用
猜你喜欢
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多