Java android中另一个复选框选中和取消选中所有复选框列的自定义列表视图?

Java android中另一个复选框选中和取消选中所有复选框列的自定义列表视图?,java,android,android-layout,listview,android-activity,Java,Android,Android Layout,Listview,Android Activity,我的适配器类中有两个复选框复选框1和复选框2。我希望如果我选中列表中的复选框所有复选框,应该选中。例如,在我的列表视图中有20个复选框,如果我选中一个复选框,那么所有其他19个复选框都应该被选中 此适配器类 public class ListViewAdapter extends ArrayAdapter<Friend> { private List<Friend> myFriends; private Activity activity; private int se

我的适配器类中有两个
复选框
复选框1和复选框2。我希望如果我选中列表中的
复选框
所有
复选框
,应该选中。例如,在我的
列表视图中有20个
复选框
,如果我选中一个复选框,那么所有其他19个复选框都应该被选中

此适配器类

public class ListViewAdapter extends ArrayAdapter<Friend> {

private List<Friend> myFriends;
private Activity activity;
private int selectedPosition = -1;

public ListViewAdapter(Activity context, int resource, List<Friend> objects) {
    super(context, resource, objects);

    this.activity = context;
    this.myFriends = objects;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    // If holder not exist then locate all view from UI file.
    if (convertView == null) {
        // inflate UI from XML file
        convertView = inflater.inflate(R.layout.item_listview, parent, false);
        // get all UI view
        holder = new ViewHolder(convertView);
        // set tag for holder
        convertView.setTag(holder);
    } else {
        // if holder created, get tag from view
        holder = (ViewHolder) convertView.getTag();
    }

    holder.checkBox1.setTag(position); // This line is important.
    holder.checkBox2.setTag(position+100);

    holder.friendName.setText(getItem(position).getName());
    if (position == selectedPosition) {
        holder.checkBox.setChecked(true);
    } else holder.checkBox.setChecked(false);

  if( holder.checkBox1.getTag().equals(position)){                    holder.checkBox1.setOnClickListener(onStateChangedListener(holder.checkBox1, position));
   }else{
       holder.checkBox2.setOnClickListener(onStateChangedListener(holder.checkBox2, position));
 }   
     return convertView;
}
 private View.OnClickListener onStateChangedListener(final CheckBox checkBox, final int position) {
    return new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (checkBox.isChecked()) {
                selectedPosition = position;
            } else {
                selectedPosition = -1;
            }
            notifyDataSetChanged();
        }
    };
}

private static class ViewHolder {
    private TextView friendName;
    private CheckBox checkBox1,checkBox2;

    public ViewHolder(View v) {
        checkBox1 = (CheckBox)v.findViewById(R.id.check);
        checkBox2=(CheckBox)v.findViewById(R.id.check1);
        friendName = (TextView) v.findViewById(R.id.name);
    }
}
}
公共类ListViewAdapter扩展了ArrayAdapter{
私人名单我的朋友;
私人活动;
private int selectedPosition=-1;
公共ListViewAdapter(活动上下文、int资源、列表对象){
超级(上下文、资源、对象);
这个活动=上下文;
this.myFriends=对象;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
LayoutFlater充气器=(LayoutFlater)activity.getSystemService(activity.LAYOUT\u充气器\u服务);
//如果持有者不存在,则从UI文件中查找所有视图。
if(convertView==null){
//从XML文件膨胀UI
convertView=充气机。充气(R.layout.item_listview,父项,false);
//获取所有UI视图
支架=新的视图支架(convertView);
//为支架设置标签
convertView.setTag(支架);
}否则{
//如果创建了保持架,则从视图中获取标记
holder=(ViewHolder)convertView.getTag();
}
holder.checkBox1.setTag(位置);//这行很重要。
支架.复选框2.设置标签(位置+100);
holder.friendName.setText(getItem(position.getName());
如果(位置==selectedPosition){
holder.checkBox.setChecked(true);
}else holder.checkBox.setChecked(false);
if(holder.checkBox1.getTag().equals(position)){holder.checkBox1.setOnClickListener(onStateChangedListener(holder.checkBox1,position));
}否则{
holder.checkBox2.setOnClickListener(onStateChangedListener(holder.checkBox2,位置));
}   
返回视图;
}
private View.OnClickListener onStateChangedListener(最终复选框,最终整型位置){
返回新视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(checkBox.isChecked()){
selectedPosition=位置;
}否则{
selectedPosition=-1;
}
notifyDataSetChanged();
}
};
}
私有静态类视图持有者{
私有文本视图名称;
专用复选框复选框1、复选框2;
公共视图持有者(视图v){
checkBox1=(复选框)v.findViewById(R.id.check);
checkBox2=(复选框)v.findViewById(R.id.check1);
friendName=(TextView)v.findViewById(R.id.name);
}
}
}

添加两个布尔标志<模型中对象级别的代码>IsCheckD1
,类级别(静态变量)的代码>IsCheckD2。默认情况下为false

我假设
复选框2
是一个一旦选中就会将所有复选框更改为选中的复选框

现在,所有模型都将具有
isChecked1
变量。单击任何
复选框1
时,在单击的位置将模型中的
isChecked1
布尔值更改为true。并调用
notifyDatasetChanged

如果用户选中复选框2,只需将静态变量更改为true。并调用
notifyDatasetChanged


getView
方法中,添加一个简单的条件,即如果
isChecked2
为true,则选中所有复选框,否则仅选中模型为
isChecked1
true的复选框

为什么不使用可扩展列表视图而不是列表视图进行此操作

<ExpandableListView
      android:id="@+id/laptop_list"
      android:layout_width="match_parent"
      android:layout_height="wrap_content">
</ExpandableListView>

在ExpandableListView中如何实现我的帖子