Android中ListView中使用CheckedTextView和CheckBox的理解

 今天學習不在佈局文件中寫佈局而將佈局文件寫入到程序的Activity中去,在佈局文件中去佈局,當我利用LayoutInflactor新建了CheckedTextView控件之後,而後將CheckedTextView添加入ListView中,而後使用CheckedTextView使用setChecked將CheckedTextView設置成true或者設置成false的時候,發現沒法改變CheckedTextView的選中的狀態,不能使用CheckedTextView本身帶的方法去修改自身的選中狀態。(CheckBox有一樣的問題)。 android

      其中Activity中添加ListView的方法代碼以下: ide

複製代碼
  
  @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方法去修改其狀態。 spa

     CheckBox 相似。 code

相關文章
相關標籤/搜索