2012-01-09 4 views
2

Я показываю записи из базы данных SQLite в расширяемом ListView, и все работает правильно, но я хотел добавить флажок рядом со всеми дочерними элементами. Каждый раз, когда я устанавливаю флажок, а затем прокручиваю вниз или сжимаю флажок, который я проверил, он не сохраняет состояние флажка. Я знаю, что список перерабатывается всякий раз, когда я прокручиваю вниз и расширяю группы и так далее. Как я могу сохранить состояние каждого флажка (каждым ребенком)? У меня есть класс, который расширяет CursorTreeAdapter и в методах нет «childPosition». Что мне нужно сделать, чтобы сохранить состояние?Как сохранить состояние флажков в расширяемом списке - Android

ответ

1

вы можете иметь массив булевых флагов того же размера, что и сумма элементов списка, и установить и получить проверенное значение из этого массива для любого компонента.

+0

Спасибо, что ответили. В каком методе я бы назвал этот массив, чтобы установить флажок, если я прокручиваю резервную копию? Кроме того, вы могли бы предоставить примерный код? – user990230

+0

вам нужно использовать этот массив в методе getChildView, он будет вызываться назад всякий раз, когда вы будете прокручивать назад или устанавливать адаптер, у меня сейчас нет образца, но вы можете искать и следить за ссылками для настройки расширяемого вида списка и вы получите достаточную помощь. – jeet

0

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

И в методе getChildView поместите все коды в блок if, как показано ниже;

public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) { 

    //FOR SAVE THE STATES!! 
    if(parents.get(groupPosition).getCounter()==0) { 
     DatePicker datePicker = null; 
     Button ok = null; 
     Spinner installment = null; 
     CheckBox creditCard; 
     ......//BLA BLA BLA 


     //After finish your codes, increment the counter 
     parents.get(groupPosition).setCounter((parents.get(groupPosition).getCounter()+1)); 
    } 

    return convertView; 
} 

Поскольку для каждого вызванного метода expandGroup все инициализации (на данный момент они находятся в блоке if) повторяются. Из-за этого вы теряете свое состояние объектов.

Надеюсь, что эта помощь.

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