Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Android > Как правильно реализовать многоуровневый список


Автор: aRixx 2.9.2012, 10:23
подскажите как правильно реализовать многоуровневый список. Думаю использовать ListView.  Допустим у меня есть таблица с полями 
id, название элемента, id_p - id родительского элемента
Мне кажется правильным вот такое решение:
Для начала вывожу в ListView названия элементов у которых id_p=0. Для этого создаю ArrayList, куда добавляю только записи у которых  id_p=0 и на его основе создаю SimpleAdapter. После щелчка по строке из ListView я очещаю свой ArrayList и формирую новый для выбранного  id_p. После этого вызываю notifyDataSetChanged() для SimpleAdapter.

С одной стороны вроде все просто, но мучают сомнения. Может быть есть более элегантное/правильное решение?

Автор: math64 3.9.2012, 08:26
Есть ExpandableListView - это фактически дерево, но вроде, с одним уровнем вложенности.
Если же ExpandableListView не устраивает, лучше сделать нормальную модель для дерева:
Код

public class Tree {
  public class Node {
   String value;
   boolean expanded;
   List<Node> childs;
  }
  Node root;
}

+ адаптер который будет отображать узлы дерева

Автор: aRixx 3.9.2012, 08:53
Собственно вопрос как раз в том, как это сделать. Переформулирую, нужно ли переписывать метод getView и там как-то фильтровать отображаемые строки или нужно где-то вне, в обработчике щелчка по элементу списка организовать перезагрузку данных с которыми связан адаптер???

Автор: math64 3.9.2012, 09:47
Если выделена модель, например, как предложил я - данные перегружать не надо, они все уже находятся в модели.
По щелчку мыши изменяется значение поля expanded узла дерева и вызывается notifyDataSetChanged().
TreeAdapter наследуешь от BaseAdapter.

Автор: aRixx 3.9.2012, 11:10
Понял, спасибо. Попробую реализовать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)