2013-04-29 5 views
1

У меня есть CheckedTextView, и этот флажок не обновляется до следующего щелчка.Анкета CheckedTextView Android не обновляется до следующего щелчка

Моя активность расширяет Activity вместо ListActivity, потому что у меня есть listView и кнопка в макете.

Я устанавливаю ListView ItemClickListener следующим образом. Проблема заключается в том, что флажок не отображается как «проверено» до щелчка другого элемента. Поэтому я нажимаю строку 3, затем я выбираю строки 4 и строки 3. Нажмите строку 10, а строка 4, наконец, подсвечивается. Когда я говорю «выделить», я имею в виду, что флажок становится зеленым.

Я не уверен, какой метод нужно вызвать, чтобы заставить этот флажок перерисовывать/обновлять сам. Я пробовал вызывать cbview.refreshDrawableState(); и cbview.getCheckMarkDrawable(). invalidateSelf(); после setChecked, но они, похоже, ничего не делают.

listView 
     .setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       CheckedTextView cbview = (CheckedTextView)view; 
       boolean checked = cbview.isChecked(); 
       cbview.setChecked(!checked); 
       Log.d("Test", "clicked:" + position + " : " + id); 
      } 

     }); 

ОБНОВЛЕНО: ОТВЕТ:

должен был сделать мой адаптер окончательный:

final ArrayAdapter<MyOption> adapter = new ArrayAdapter<MyOption>(this, 
      android.R.layout.simple_list_item_checked, options); 

, а затем вызвать adapter.notifyDataSetChanged() в onItemClick:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {     
       CheckedTextView cbview = (CheckedTextView)view; 
       boolean checked = cbview.isChecked(); 
       cbview.setChecked(!checked); 
       Log.d("Test", "clicked:" + position + " : " + id + ":" + cbview.isChecked()); 
       adapter.notifyDataSetChanged();     
      } 

ответ

0

У вас попробовано

listViewAdapater.notifyDataSetChanged(); 
+0

Я считаю, что вызов 'setChecked()' перерисовывает 'view', что вызывает вызов' invalidate() '. То же самое с 'setText()' на 'TextView' – codeMagic

+0

просто попробовал вызвать его после setChecked. Не работает – headlikearock

+0

как насчет этого ..? 'listViewAdapater.notifyDataSetChanged();' – k1komans

Смежные вопросы