В настоящее время я могу проверить/снять флажки с помощью groupPosition и childPosition, и он работает нормально. Я сохраняю groupPosition и childPosition в базе данных SQLite.Как сохранить флажки ExpandableListView Проверенные состояния?
Когда я добавил параметр удаления, мой флажок установлен, состояния отключены/испорчены.
Для меня, например, следующее:
Group1,
Child1, Child2, Child3
проверить все три из них и сохранить проверенные позиции в базе данных SQLite. Проверенные позиции будут 0,0 и 0,1 и 0,2 в базе данных.
После того как я удалил child1,
Child2 становится положение 0, Child3 становится позиция 1, которая будет портить проверенные состояния.
Я пытаюсь найти способ сохранить имя группы и дочернее имя вместо позиций базы данных SQLite, а затем загрузить эти имена в методе Oncrete.
MainActivity:
if(category_array.get(groupPosition).subcategory_array.get(childPosition).selected) {
category_array.get(groupPosition).subcategory_array.get(childPosition).selected = false;
try{
MySQLITE_DATABASE.deleteRows(groupPosition, childPosition);
}
catch (Exception e) {}
}
else
{
category_array.get(groupPosition).subcategory_array.get(childPosition).selected = true;
MySQLITE_DATABASE.addRow(groupPosition, childPosition);
}
код адаптера:
private List<Category> mGroupCollection;
if(mGroupCollection.get(groupPosition).subcategory_array.get(childPosition).selected) {
childHolder.checkBox.setBackgroundResource(R.drawable.checkbox_checked);
} else {
childHolder.checkBox.setBackgroundResource(R.drawable.checkbox_unchecked);
}
Дата Holder Классы:
public class Category {
public String category_name = null;
public String cat_SelectedChildCount_name;
public ArrayList<SubCategory> subcategory_array = new ArrayList<SubCategory>();
}
//==============================
public class SubCategory {
public String subcategory_name = null;
public boolean selected = false;
}
Я хочу, чтобы сохранить название группы и имя ребенка вместо позиций в SQLite База данных, а затем загрузите их в методе OnCreate.
Я попытался это, но он не работает:
String Group_Name = category_array.get(Integer.parseInt(groupPosition)).category_name;
String Child_Name = category_array.get(Integer.parseInt(groupPosition)).
subcategory_array.get(Integer.parseInt(childPosition)).subcategory_name;
if(category_array.get(Group_Name).subcategory_array.get(Child_Name).selected) {
category_array.get(Group_Name).subcategory_array.get(Child_Name).selected = false;
MySQLITE_DATABASE.DeleteRow(Group_Name, Child_Name);
}
else {
category_array.get(Group_Name).subcategory_array.get(Child_Name).selected = true;
MySQLITE_DATABASE.AddRow(Group_Name, Child_Name);
}
Я знаю, что мне нужно изменить код в adapater, классы держателей данных и mainactivity для того, чтобы заставить его работать, но я из идей. Я думал и думал, но ничего не работает ...
Может кто-нибудь пожалуйста, пожалуйста, посоветуйте мне об этом?
Прошу прощения за длинный код.
Благодарим вас и благодарим вас.
Спасибо за комментарии. Вы упомянули, что не используйте позицию, если есть опция удаления. Как я могу это достичь? В моем адаптере для него требуется как groupPosition, так и childPosition, чтобы он мог установить флажок или снять флажок. Что касается child_position - 1, я подумал об этом, но потом я подумал, что это будет медленная производительность, если удалено более 1 childPosition. Я очень ценю это. –
Да. Это будет немного. В вашем адаптере вы можете 'setTag' детали, которые вы хотите связать с каждой строкой списка. Попытайтесь использовать это –
Я понятия не имею, как начать с setTag и getTag. Я просто дам вам чек, чтобы упомянуть о child_position = child_position - 1. Я продолжаю эту идею, пока не узнаю больше об Android для лучшей производительности позже. Большое спасибо за помощь моему другу. –