Android中ListView中使用CheckedTextView和CheckBox的理解
2011-05-19 00:34
751 查看
今天学习不在布局文件中写布局而将布局文件写入到程序的Activity中去,在布局文件中去布局,当我利用LayoutInflactor新建了CheckedTextView控件以后,然后将CheckedTextView添加入ListView中,然后使用CheckedTextView使用setChecked将CheckedTextView设置成true或者设置成false的时候,发现无法改变CheckedTextView的选中的状态,不能使用CheckedTextView自己带的方法去修改自身的选中状态。(CheckBox有同样的问题)。
其中Activity中添加ListView的方法代码如下:
其中设置listView结构的代码是使用的listView.setAdapter()方法来设置的。(在这个里面设置了CheckedTextVew),下面展示了DataAdapter中最重要的方法getView()方法:
从上面的函数我们可以看到的是红色注释的部分是CheckedTextView控件本身视图去改变其自身的选中的状态,这样使用的话,在我们的ListView中CheckedTextView显示将不会出现任何的改变,因此在ListView中CheckedTextView无法改变自身的状态,而ListView中有一个方法listView.setItemChecked(long position, boolean value)方法来改变处于ListView某个位置的控件的选中的状态,若控件不支持选中,将不会改变什么,反之,控件将改变其状态。
看了看android其中的源代码,看到了listView.setItemChecked()函数的方法,函数如下:
我们可以看到方法中,当listView的ChoiceMod设置成了CHOICE_MODE_MULTIPLE后,是用mCheckedIdStates.put(mAdapter.getItemId(position), Boolean.TRUE);来设置控件的值,因此我们可以推断出listView某个的时候对其中的item进行了选中状态的设置,因此,我们自己设置的话会被listView给覆盖掉,只能使用listView方法去修改其状态。
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 类似。
有什么不对的请提出,谢谢了。
相关文章推荐
- android listview checkedTextView 的使用
- android listView 自定义布局结合CheckedTextView实现多选
- android listView 自定义布局结合CheckedTextView实现多选
- Android AutoCompleteTextView,Spinner和ListView的使用
- Android:ListView、CheckedTextView 、setOnItemClickListener
- ListView中使用CheckedTextView实现多选
- Android实例demo10之listview的使用(加载xml、textview、BaseAdapter的使用)
- android 在listview中实现点击textview改变checkbox的状态
- Android中AutoCompleteTextView,Spinner和ListView的使用
- AndroidUI:ToggleButton + Switch + CheckBox + CheckedTextView
- CheckedTextView的使用、学android疯狂讲义第二版遇到的问题希望能帮到和我一样的初学者、新手
- Android学习-实现一个ListView中由Checkbox和TextView构成的布局
- android ListView使用ViewHolder优化时,EditText设置TextWatcher时,滑动ListView导致内容错乱
- Android -- listview的使用, Inflater打气筒创建View对象,三种数据Adapter
- Android列表组件ListView使用详解之ViewHolder提高效率
- Android TextView使用HTML处理字体样式、显示图片等
- android Textview 使用之一:伸缩效果
- android Button,textView 等控件设置控件内嵌周围图片使用方法
- Android控件 – ListView的使用(二)– addHeaderView、addFooterView的使用与滑动优化
- Android 基础一 TextView,Style样式,Activity 传值,选择CheckBox 显示密码