java 如何在2个回收视图中仅选中一个复选框

68bkxrlz  于 2022-12-21  发布在  Java
关注(0)|答案(1)|浏览(109)

我在一个片段上得到了2个回收视图。两个回收视图都包含项目和复选框。在两个回收视图中只能选择一个复选框。因此,如果选择了一个复选框,则在两个回收视图中的所有其他复选框都应关闭。
这是我当前的代码。这段代码意味着在每个RecyclerView中当前只能选中一个复选框。
我的两个recylcerview适配器如下所示(注:两者完全相同,所以我只发布其中一个):

@Override
public void onBindViewHolder(@NonNull NameViewHolder holder, @SuppressLint("RecyclerView") int position) {
    //getting broadcast from 1st recyclerviewadapter
    LocalBroadcastManager.getInstance(context).registerReceiver(mNameReceiver, new IntentFilter("checkbox_first_adapter"));

    String name = namesArrayList.get(position);

    holder.nameView.setText(name);
    
    holder.checkBox.setVisibility(View.VISIBLE);

    holder.checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            rowIndex = position;
            notifyDataSetChanged();
            //If checkbox is checked, send broadcast to 2nd recyclerviewadapter
            sendCheckBoxBroadCast();
            isClicked = true;
        }
    });

    if (isCheckBoxChecked) {
        holder.checkBox.setChecked(false);
    }

    if (!isClicked) {
        if (selectedName != null) {
            if (name.equals(selectedName.getName())) {
                holder.checkBox.setChecked(true);
                sendCheckBoxBroadCast();
            }
        }
    } else {
        if (rowIndex == position) {
            holder.checkBox.setChecked(true);
        } else {
            holder.checkBox.setChecked(false);
        }
    }

}

public BroadcastReceiver mNameReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        isCheckBoxChecked = intent.getBooleanExtra("isCheckBoxChecked", false);
    }
};

private void sendCheckBoxBroadCast() {
    Intent intent = new Intent("checkbox_second_adapter");
    intent.putExtra("isCheckBoxChecked", true);
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}

我如何向第二个recyclerview适配器发出信号,通知它已选中某个复选框,以便它知道要取消选中所有复选框?

e5nszbig

e5nszbig1#

你可以从三个方面入手:
第一种肮脏的方法是将一个适配器传递给另一个适配器,反之亦然,当一个适配器有一个复选框事件时,它回调另一个适配器。
第二种方法是实现某种接口。你说过两个适配器是相似的,所以这不应该是个问题。这个接口将有一个方法,即更新复选框的回调。从调用者活动类,你应该能够管理它们(如果需要添加更多适配器,也可以将它们放入数组中),并从其中一个适配器获得回调。
第三种,也可能是最简洁的方法是合并recycerviews:由于recyclerview可以显示不同类型的视图(您只需稍微修改一下onBindViewHolder方法),因此可以只使用一个适配器类(取决于具体情况,可能是您没有提供足够的信息来实现这一点,也可能是完全排除了这一点)。

相关问题