listView中,checkBox的显示和隐藏

在listView中,每个item都有一个ChexBox,当显示的时候在listView外面设置一个按钮,点击显示和隐藏listView中所有的checBox;

开始的我的实现方法为:

Button add = (Button)findViewById(R.id.add); 
        add.setOnClickListener(new OnClickListener() { 
            @Override 
            public void onClick(View v) {

                if(flage){checkBox.setVisibility(View.VISIBLE);flage=!flage;} 
                else{checkBox.setVisibility(View.GONE);flage=!flage;}                
            } 
        });

后来发现,只能改变listView中第一个checBox,对listView中其他的item不起作用。

 

 

以上做法不对,正确的做法是在Adapter中的getView中设置隐藏和显示,做法如下:

在getView中,

final CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox); 
                if(flage){checkBox.setVisibility(View.VISIBLE);} 
                else{checkBox.setVisibility(View.GONE);}

 

然后在按钮点击事件中:

@Override 
            public void onClick(View v) { 
                flage=!flage; 
                mySubscriptionsListAdapt.notifyDataSetChanged(); 
            }

 

notifyDataSetChanged();是实现listView刷新的功能,不需要再次加载整个listView。

转载于:https://www.cnblogs.com/vicma/p/3460500.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要切换Adapter的所有checkbox控件的显示隐藏,可以通过以下步骤实现: 1. 在外层Adapter的getView方法,为里层Adapter的checkbox控件设置一个tag,用来标记该控件的位置。 2. 在外层Adapter定义一个SparseBooleanArray变量,用来记录每个checkbox控件的显示隐藏状态。 3. 在外层Adapter的getView方法,根据SparseBooleanArray记录的状态来设置checkbox控件的显示隐藏状态。 4. 在按钮的点击事件,遍历所有的里层Adapter,根据里层Adapter的位置找到对应的checkbox控件,并根据SparseBooleanArray记录的状态来切换该控件的显示隐藏状态。 以下是示例代码: 外层Adapter的getView方法: ``` @Override public View getView(int position, View convertView, ViewGroup parent) { // 获取里层Adapter InnerAdapter innerAdapter = getItem(position); // 创建里层Adapter的View View innerView = innerAdapter.getView(); // 为里层Adapter的checkbox设置tag CheckBox checkBox = innerView.findViewById(R.id.checkbox); checkBox.setTag(position); // 根据SparseBooleanArray记录的状态设置checkbox显示隐藏状态 checkBox.setVisibility(mSparseBooleanArray.get(position) ? View.VISIBLE : View.GONE); // 返回里层Adapter的View return innerView; } ``` 按钮的点击事件: ``` button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 遍历所有的里层Adapter for (int i = 0; i < getCount(); i++) { // 获取ListView ListView listView = findViewById(R.id.listview); // 获取里层Adapter的View View innerView = ((AdapterView) listView.getChildAt(i)).getChildAt(0); // 根据checkbox的tag找到该控件 CheckBox checkBox = innerView.findViewById(R.id.checkbox); int tag = (int) checkBox.getTag(); // 根据SparseBooleanArray记录的状态来切换checkbox显示隐藏状态 if (mSparseBooleanArray.get(tag)) { checkBox.setVisibility(View.GONE); mSparseBooleanArray.put(tag, false); } else { checkBox.setVisibility(View.VISIBLE); mSparseBooleanArray.put(tag, true); } } // 通知外层Adapter数据已改变 notifyDataSetChanged(); } }); ``` 其,mSparseBooleanArray是一个SparseBooleanArray类型的变量,用来记录每个checkbox控件的显示隐藏状态。在外层Adapter的构造方法,需要初始化该变量并设置所有的checkbox控件的显示状态为false。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值