博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中ListView中使用CheckedTextView和CheckBox的理解
阅读量:7079 次
发布时间:2019-06-28

本文共 2650 字,大约阅读时间需要 8 分钟。

hot3.png

 今天学习不在布局文件中写布局而将布局文件写入到程序的Activity中去,在布局文件中去布局,当我利用LayoutInflactor新建了CheckedTextView控件以后,然后将CheckedTextView添加入ListView中,然后使用CheckedTextView使用setChecked将CheckedTextView设置成true或者设置成false的时候,发现无法改变CheckedTextView的选中的状态,不能使用CheckedTextView自己带的方法去修改自身的选中状态。(CheckBox有同样的问题)。

      其中Activity中添加ListView的方法代码如下:

复制代码
 
  @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super .onCreate(savedInstanceState); // 设置显示 listView = getListView(); // 实例化 li = getLayoutInflater();
     //设置可多选 listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listView.setAdapter( new DataAdapter()); }
复制代码

      其中设置listView结构的代码是使用的listView.setAdapter()方法来设置的。(在这个里面设置了CheckedTextVew),下面展示了DataAdapter中最重要的方法getView()方法:

    

复制代码
 
@Override public View getView( int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View view = li.inflate(R.layout.second, null ); switch (position) { // 是否开启通讯录 case 0 : ctv1 = (CheckedTextView)li.inflate( android.R.layout.simple_list_item_multiple_choice, null ); ctv1.setText(str[position]); if (on_off == 1 ){ Log.i(TAG, " on_off= " + on_off); //ctv1.setChecked(true);
            listView.setItemChecked(position, true ); } else {
//ctv1.setChecked(false); listView.setItemChecked(position, false ); } return ctv1; // 开启闹钟 case 2 : ctv2 = (CheckedTextView)li.inflate( android.R.layout.simple_list_item_multiple_choice, null ); ctv2.setText(str[position]); if (alarm == 1 )
           //ctv2.setChecked(true); listView.setItemChecked(position, true ); else {
           //ctv2.setChecked(false); listView.setItemChecked(position, false ); } return ctv2; default : return null ; } } }
复制代码

        从上面的函数我们可以看到的是红色注释的部分是CheckedTextView控件本身视图去改变其自身的选中的状态,这样使用的话,在我们的ListView中CheckedTextView显示将不会出现任何的改变,因此在ListView中CheckedTextView无法改变自身的状态,而ListView中有一个方法listView.setItemChecked(long position, boolean value)方法来改变处于ListView某个位置的控件的选中的状态,若控件不支持选中,将不会改变什么,反之,控件将改变其状态。

       看了看android其中的源代码,看到了listView.setItemChecked()函数的方法,函数如下:

复制代码
 
public void setItemChecked( int position, boolean value) { if (mChoiceMode == CHOICE_MODE_NONE) { return ; } if (mChoiceMode == CHOICE_MODE_MULTIPLE) { mCheckStates.put(position, value); if (mCheckedIdStates != null && mAdapter.hasStableIds()) { if (value) { mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE); } else { mCheckedIdStates.delete(mAdapter.getItemId(position)); } } } }
复制代码

       我们可以看到方法中,当listView的ChoiceMod设置成了CHOICE_MODE_MULTIPLE后,是用mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE);来设置控件的值,因此我们可以推断出listView某个的时候对其中的item进行了选中状态的设置,因此,我们自己设置的话会被listView给覆盖掉,只能使用listView方法去修改其状态。

     CheckBox 类似。

转载于:https://my.oschina.net/guansheng/blog/136580

你可能感兴趣的文章
oracle 修改整张表数据
查看>>
关于iOS9中的App Transport Security相关说明及适配(更新于2016.7.1)
查看>>
ThinkPHP框架研究之一 基本函数 M和D的区别
查看>>
会员签到
查看>>
生成二维码 php QR Code
查看>>
php使用gearman进行任务分发
查看>>
supervisor命令出现unix:///tmp/supervisor.sock no such file报错
查看>>
让request.is_ajax工作
查看>>
详解TreeMap的红黑树实现
查看>>
LNMP架构
查看>>
MongoDB
查看>>
京东的压测军演系统
查看>>
nginx之fail_timeout和max_fails
查看>>
JQUERY的父,子,兄弟节点查找方法
查看>>
指随心动vi
查看>>
数据验证控件
查看>>
关于Window的Dos Batch 文件编写的常识
查看>>
hbase思维脑图
查看>>
javascript中的一些常用函数
查看>>
负载均衡小demo,未实现session共享
查看>>