Android: ListView CheckBox проверен непреднамеренно - PullRequest
0 голосов
/ 18 мая 2011

У меня есть ListView, который находится под строкой заголовка и макет над строкой нижнего колонтитула. Каждая строка ListView содержит LinearLayout с CheckBox и TextView рядом. Теперь, когда у меня есть больше строк, которые могут быть показаны одновременно, вы, конечно, можете прокрутить вниз или вверх. Однако после прокрутки вниз или вверх первый и / или последний CheckBox проверяется автоматически. Мой палец далеко не там, где вы бы отметили флажок. Что может быть причиной этого? Обратите внимание, что я использовал код здесь: http://www.anddev.org/checkbox_text_list___extension_of_iconified_text_tutorial-t771.html

1 Ответ

1 голос
/ 18 мая 2011

Кратко изучая код, представленный по указанной ссылке, я вижу следующее:

 public View getView(int position, View convertView, ViewGroup parent){
      CheckBoxifiedTextView btv;
      if (convertView == null) {
           btv = new CheckBoxifiedTextView(mContext, mItems.get(position));
      } else { // Reuse/Overwrite the View passed
           // We are assuming(!) that it is castable!
           CheckBoxifiedText src = mItems.get(position);
           btv = (CheckBoxifiedTextView) convertView;
           btv.setCheckBoxState(src.getChecked());  // set checked state
           btv = (CheckBoxifiedTextView) convertView;
           btv.setText(mItems.get(position).getText());
      }
      return btv;
 }

Как видите, представление повторно используется во время прокрутки, и состояние флажка устанавливается с помощью метода setCheckBoxState . Затем в CheckBoxifiedTextView вы можете найти:

 public void setCheckBoxState(boolean bool)
 {
     mCheckBox.setChecked(mCheckBoxText.getChecked());
     mCheckBoxText.setChecked(true); // <-- HERE !
 } 

, где в 4-й строке задан жесткий код setChecked ( true ), который может вызывать проблему.

...