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