2013-09-05 1 views
2

Я создал ExpandableListView с довольно сложным дочерним элементом xml. Он содержит TextView, флажок и EditText. Вот CheckBox часть:Проверить флажок CheckBox дочернего элемента ExpandableListView случайным образом

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="55dip" 
       android:orientation="horizontal" 
       android:stretchColumns="0"> 
    <TableRow> 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 
    <TextView 
     android:id="@+id/lblListItem" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="14dip" 
     android:paddingTop="2dp" 
     android:paddingBottom="2dp" 
     android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft"/> 
    <CheckBox 
     android:id="@+id/cboxIsRel" 
     android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 

    </CheckBox> 
    </TableRow> 
    </TableLayout> 

Если я проверяю 1-й пункт, в каждой группе пятый элемент также получает проверяется (если выбран второй, то шестой получает выбранный).

Почему они также выбраны?

ОБНОВЛЕНИЕ:
В методе getChildView меня есть этот код:

, если (convertView == NULL) { LayoutInflater infalInflater = (LayoutInflater) this._context .getSystemService (Context.LAYOUT_INFLATER_SERVICE) ; convertView = infalInflater.inflate (R.layout.expandable_list_item, null); }

TextView txtListChild = (TextView) convertView 
    .findViewById(R.id.lblListItem); 

txtListChild.setText(childText); 

Если я не использую проверку convertView, то флажок не используется повторно, но и установлен флажок получает Unselected, если я перечисляю вне.

ответ

3

Это из-за переработки видов.

Убедитесь, что на вашем адаптере методы bindView() или getView() устанавливают флажок как установленный или нет.

Edit:

ListView повторно мнения для улучшения производительности, поэтому в вашем случае первый пункт отмечен, то тот же вид используется на 5-м ребенком, поэтому его почему она также проверяется.

Чтобы не допустить этого, вы должны сохранить, какая позиция проверена, и по вашему методу getChildView() вы должны проверить/снять флажок на основе сохраненного значения.

Таким образом, вы проверяете 1-й элемент, затем прокручиваете и просмотр перерабатывается на 5-й ребенок, адаптер будет вызывать getChildView для позиции 5, и вы проверите, был ли он проверен. Поскольку он не установлен, вы вызываете setchecked (false) на флажке, и он будет отображаться непроверенным.

+0

Я не совсем понимаю ваше предложение. В адаптере у меня есть getChildView, но он не устанавливает ничего из состояния флажка. Можете ли вы объяснить немного больше? – Nestor

+0

@Nestor см. Новое редактирование –

+0

Я отвечаю за сохранение проверенных состояний моих флажков? Скажем, в HashMap? Разве нет встроенной поддержки для этого? – Nestor

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