Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从其他项目更新recyclerview项目中的数据?_Android_Android Recyclerview_Radio Button - Fatal编程技术网

Android 如何从其他项目更新recyclerview项目中的数据?

Android 如何从其他项目更新recyclerview项目中的数据?,android,android-recyclerview,radio-button,Android,Android Recyclerview,Radio Button,我的RecyclerView有问题,我的RecyclerView有一个单选按钮,每行项目中几乎没有其他视图 我想要的是,当用户选中一个单选按钮时,我想取消选中其他单选按钮(如果之前选中了任何内容)。因为它是一个Recyclerview我不能使用radiogroup 在adapteronBindViewHolder中,我为每个单选按钮编写此侦听器 holder.radioButton.setOnClickListener(new View.OnClickListener() {

我的
RecyclerView
有问题,我的
RecyclerView
有一个
单选按钮
,每行项目中几乎没有其他视图

我想要的是,当用户选中一个
单选按钮时,我想取消选中其他
单选按钮(如果之前选中了任何内容)。因为它是一个
Recyclerview
我不能使用radiogroup

在adapter
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特定项目中的视图属性?

尝试以下操作:

        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();
            }
        });
试试这个:

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

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

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

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

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

看到这个了吗?@Sanjay Majoka哦,是的,这是我想要的,我试过了,效果很好,非常感谢你的帮助:)看到这个了?@Sanjay Majoka哦,是的,这是我想要的,我试过了,效果很好,非常感谢你的帮助:)我在@Sanjay Majoka给我的链接中找到了我的请求,但谢谢你这是另一个很好的答案,它对mei有效在@Sanjay Majoka给我的链接中找到我的请求,但谢谢你这是另一个很好的答案,它对我有效greate,它很好,但是当我更新所有项目并且recyclerview有大量数据时,会有几秒钟的延迟?recyclerview不会一次更新列表中的所有项目。顾名思义,Recyclerview不会渲染甚至绘制列表中的项目,它只会重用视图。当每个项目出现在显示屏上时,它们都会得到更新。所以不必担心滞后。啊,我明白了,谢谢你的解释,让事情变得清晰OK greate,它工作得很好,但是当我更新所有项目,并且recyclerview有大量数据时,会有几秒钟的滞后?recyclerview不会一次更新列表中的所有项目。顾名思义,Recyclerview不会渲染甚至绘制列表中的项目,它只会重用视图。当每个项目出现在显示屏上时,它们都会得到更新。所以不必担心滞后。啊,我明白了,谢谢你的解释和澄清