如何从另一个项目更新recyclerview项目中的数据?

时间:2017-12-18 08:44:37

标签: android android-recyclerview radio-button

我遇到RecyclerView的问题,我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的特定项目中的视图属性?

2 个答案:

答案 0 :(得分:2)

您需要在适配器中全局引用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();
        }
    });
}

答案 1 :(得分:1)

试试这个::

        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();
            }
        });