1

В настоящее время я могу проверить/снять флажки с помощью 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 для того, чтобы заставить его работать, но я из идей. Я думал и думал, но ничего не работает ...

Может кто-нибудь пожалуйста, пожалуйста, посоветуйте мне об этом?

Прошу прощения за длинный код.

Благодарим вас и благодарим вас.

ответ

1

Попробуйте выполнить любое из следующих действий, если это подходит вашему требованию.

Если вы хотите использовать положение строго (Может быть не уникальная опция)

  • Держите дизайн DB как

| id | parent_position | child_position | 

Предположим, у вас есть N детей. Если вы удалите дочерний элемент (предположим, что он равен 0).сделать этот

  • обновить все ребенок с (child_position = child_position - 1), положение которого больше, чем удаленным ребенком родителя. Таким образом, позиция остается неизменной.

Лично я бы предложил не использовать position, если есть опция удаления. Вариант, что я нашел, но не знаю, что ваш случая использования

  • Если вы загружаете список из базы данных с помощью базы данных primarykey в качестве ключа, чтобы сохранить его в SQLite database на выбор/unselection. В этом случае вы также не хотите знать родительскую позицию.
+0

Спасибо за комментарии. Вы упомянули, что не используйте позицию, если есть опция удаления. Как я могу это достичь? В моем адаптере для него требуется как groupPosition, так и childPosition, чтобы он мог установить флажок или снять флажок. Что касается child_position - 1, я подумал об этом, но потом я подумал, что это будет медленная производительность, если удалено более 1 childPosition. Я очень ценю это. –

+0

Да. Это будет немного. В вашем адаптере вы можете 'setTag' детали, которые вы хотите связать с каждой строкой списка. Попытайтесь использовать это –

+0

Я понятия не имею, как начать с setTag и getTag. Я просто дам вам чек, чтобы упомянуть о child_position = child_position - 1. Я продолжаю эту идею, пока не узнаю больше об Android для лучшей производительности позже. Большое спасибо за помощь моему другу. –