如题RecyclerView中使用多个Switch,为每个Switch绑定事件。可以在onBindViewHolder中使用holder.aSwitch.setOnCheckedChangeListener。对ViewHolder中绑定的控件进行控制,参数position定位RecyclerView行数,每个setOnCheckedChangeListener中确定这一行哪一个被改变。 这里我使用了8个Switch。 2个布局代码省略。Acitvity中控制代码如下 adapter代码如下 定义变量
boolean[][] switch_position = new boolean[100][8];
adapter 重写
adapter = new RecyclerView.Adapter<HomeFragment.DeviceViewHolder>() {
@Override
public HomeFragment.DeviceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(getContext()).inflate(R.layout.device_detail_main,null);
return new HomeFragment.DeviceViewHolder(view,this);
}
@Override
public void onBindViewHolder(DeviceViewHolder holder, int position) {
for(int i=0 ; i< 8 ; i++) holder.aSwitch[i].setChecked(switch_position[position][i]);
for(int i=0 ; i< 8 ; i++)
{
final int k = i;
holder.aSwitch[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int position_2 = k;
if (isChecked)
{
System.out.println(position+" "+position_2+" is be Checked");
switch_position[position][position_2] = true;
}
else
{
System.out.println(position+" "+position_2+" is not be Checked");
switch_position[position][position_2] = false;
}
}
});
}
}
@Override
public int getItemCount() {
return devList.size();
}
};
ViewHolder :
class DeviceViewHolder extends RecyclerView.ViewHolder
{
Switch aSwitch[] = new Switch[8];
private RecyclerView.Adapter adapter;
public DeviceViewHolder(View itemView,RecyclerView.Adapter adapter) {
super(itemView);
this.aSwitch[0] = itemView.findViewById(R.id.switch1);
this.aSwitch[1] = itemView.findViewById(R.id.switch2);
this.aSwitch[2] = itemView.findViewById(R.id.switch3);
this.aSwitch[3] = itemView.findViewById(R.id.switch4);
this.aSwitch[4] = itemView.findViewById(R.id.switch5);
this.aSwitch[5] = itemView.findViewById(R.id.switch6);
this.aSwitch[6] = itemView.findViewById(R.id.switch7);
this.aSwitch[7] = itemView.findViewById(R.id.switch8);
this.rootView = itemView.findViewById(R.id.item_root);
this.adapter = adapter;
}
}
运行结果:这里RecyclerView中有2行。
I/System.out: 0 4 is be Checked
I/System.out: 0 4 is not be Checked
I/System.out: 0 5 is be Checked
I/System.out: 0 5 is not be Checked
I/System.out: 1 1 is be Checked
I/System.out: 1 1 is not be Checked
I/System.out: 1 6 is be Checked
I/System.out: 1 6 is not be Checked
|