Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 16 июл 2018, 05:42

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 178 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9
Автор Сообщение
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 19 фев 2015, 18:18 

Зарегистрирован: 19 фев 2015, 02:18
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
наверно глупый вопрос. но где в коде урока видно как тот или иной элемент присваевается к той или иной группе? просто путем перечисления по порядку? первый блок элементов к первой группе, второй блок элементов ко второй группе?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 19 фев 2015, 22:01 

Зарегистрирован: 19 фев 2015, 02:18
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Arch1e писал(а):
"А вообще вы можете создать для элементов свой layout, например, с тремя TextView. И к каждому элементу списка (Map) добавить еще по два атрибута: цена и цвет. Далее указываете ваш layout в конструкторе, формируете соответственно массивы childFrom и childTo чтобы сопоставить атрибуты и TextView, и получится, что каждый элемент группы содержит более подробную информацию о смартфоне."
Скиньте пожалуйста такой полный код урока



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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 19 фев 2015, 22:22 
Аватар пользователя

Зарегистрирован: 23 ноя 2013, 16:08
Сообщений: 1107
Откуда: Ukraine
Благодарил (а): 31 раз.
Поблагодарили: 175 раз.
Как по мне двойной список слишком тяжелый, чтобы находится в 45 уроке. Сначала нужно освоить обычные списки, адаптеры для них, в том числе и кастомные., а потом уже за такие штуки браться. Если не горит, то смело переходи к 46 уроку.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 20 фев 2015, 01:22 
Аватар пользователя

Зарегистрирован: 20 фев 2015, 01:03
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Ребята, в конце урока написано
Цитата:
А вообще вы можете создать для элементов свой layout, например, с тремя TextView. И к каждому элементу списка (Map) добавить еще по два атрибута: цена и цвет. Далее указываете ваш layout в конструкторе, формируете соответственно массивы childFrom и childTo чтобы сопоставить атрибуты и TextView, и получится, что каждый элемент группы содержит более подробную информацию о смартфоне.

Привожу кусок кода, как я это попытался реализовать:
Код: [ Загрузить ] [ Скрыть ]
  1. //добавил еще один массив с ценой 
  2. String[] prices = new String[]{"100","100","100","100","100","100","100","100","100","100","100"}; 

Добавляю в наш массив с коллецкиями коллекций еще цену, точно так же как добавляли модели телефонов.
Код: [ Загрузить ] [ Скрыть ]
  1. childDataItem = new ArrayList<Map<String,String>>(); 
  2.         for (String price : prices){ 
  3.             m = new HashMap<String,String>(); 
  4.             m.put("price",price); 
  5.             childDataItem.add(m); 
  6.         } 
  7.         childData.add(childDataItem); 

Пишу свой примитивный item.xml для отображения. В нем два текстовых поля с id textView1 и textView2 соответственно
Код: [ Загрузить ] [ Скрыть ]
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_width="match_parent" android:layout_height="50dp"> 
  4.  
  5.     <FrameLayout 
  6.         android:layout_width="fill_parent" 
  7.         android:layout_height="fill_parent" 
  8.         android:layout_gravity="left|top"> 
  9.  
  10.         <TextView 
  11.             android:layout_width="wrap_content" 
  12.             android:layout_height="wrap_content" 
  13.             android:text="New Text" 
  14.             android:id="@+id/textView1" 
  15.             android:layout_gravity="left|center_vertical" 
  16.             android:textSize="25dp" /> 
  17.  
  18.         <TextView 
  19.             android:layout_width="wrap_content" 
  20.             android:layout_height="wrap_content" 
  21.             android:text="New Text" 
  22.             android:id="@+id/textView2" 
  23.             android:layout_gravity="right|center_vertical" 
  24.             android:textSize="25dp" /> 
  25.     </FrameLayout> 
  26.  
  27. </FrameLayout> 


А теперь пытаюсь вывести
Код: [ Загрузить ] [ Скрыть ]
  1. String childFrom[] = new String[]{"phoneName","price"}; 
  2.         int childTo[] = new int[]{R.id.textView1,R.id.textView2}; 
  3.  
  4.  
  5.  
  6.         SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter( 
  7.                 this, 
  8.                 groupData, 
  9.                 android.R.layout.simple_expandable_list_item_1, 
  10.                 groupFrom, 
  11.                 groupTo, 
  12.                 childData, 
  13.                 R.layout.item, 
  14.                 childFrom,childTo 
  15.         ); 


Но выводит оно только в текстовое поле textView1, поле textView2 оно заполняет пустотой.
Что я не так делаю?
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 20 фев 2015, 02:31 

Зарегистрирован: 19 фев 2015, 02:18
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
я примерно так же пытался, только еще надо from - to настроить , но у меня все равно не вышло. а сорри проглядел, ты тоже это делал. ну вобщем я по предыдущему совету бросил и пошел дальше по урокам. может потом разберусь или кто тут подскажет ...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 21 фев 2015, 18:52 
Аватар пользователя

Зарегистрирован: 20 фев 2015, 01:03
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
В общем ,я так и не разобрался. Видимо особенности именно этого адаптера. В 49 уроке будет адаптер на два textview, там все почему-то работает.
Я просидел над этим уроком (45м), часа три. Перечитывал кучу раз, рисовал схемки что бы понять как оно все устроено в этом уроке, потому как нифига там не понятно разьяснено :( очень трудно вникнуть
Реально очень тяжелый урок, я не понимаю, что он тут делает, т.к последующие в разы легче. Может их как-то местами поменять бы?..
Выше уже написали, что урок можно пропустить если не понял. Полностью согласен.
Советую всем кто не может в него вникнуть, забить на него и читать дальше, через пару уроков все станет на свои места.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 31 мар 2015, 15:35 

Зарегистрирован: 31 мар 2015, 15:17
Сообщений: 15
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Очень плохо что в уроке используются системные переменнты в childTo и groupTo. Из-за этого он сложен для понимания. Кстати, у меня поличилось сделать 2 текст-вью описаным Вами способом. Все работает :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 30 июл 2015, 03:26 

Зарегистрирован: 06 июн 2015, 13:47
Сообщений: 7
Благодарил (а): 6 раз.
Поблагодарили: 1 раз.
Цитата:
А вообще вы можете создать для элементов свой layout, например, с тремя TextView. И к каждому элементу списка (Map) добавить еще по два атрибута: цена и цвет. Далее указываете ваш layout в конструкторе, формируете соответственно массивы childFrom и childTo чтобы сопоставить атрибуты и TextView, и получится, что каждый элемент группы содержит более подробную информацию о смартфоне.


stas, Neustart, Arch1e
Моя реализация, может кому поможет:
MainActivity:
Код: [ Загрузить ] [ Скрыть ]
  1. public class MainActivity extends Activity { 
  2.  
  3.     String[] groups = new String[] {"HTC", "Samsung", "LG"}; 
  4.     String[] phonesHTC = new String[] {"Sensation", "Desire", "Wildfire", "Hero"}; 
  5.     String[] phonesSams = new String[] {"Galaxy S II", "Galaxy Nexus", "Wave", "Absolute"}; 
  6.     String[] phonesLG = new String[] {"Optimus", "Optimus Link", "Optimus Black", "Optimus One"}; 
  7.     String[] colors = new String[] {"Black", "Blue", "White", "Pink"}; 
  8.     String[] prices = new String[] {"400$", "350$", "500$", "200$"}; 
  9.  
  10.     ArrayList<Map<String, String>> groupData; 
  11.     ArrayList<Map<String, String>> childDataItem; 
  12.     ArrayList<ArrayList<Map<String, String>>> childData; 
  13.     // childData = ArrayList<childDataItem> 
  14.  
  15.     // список аттрибутов группы или элемента 
  16.     Map<String, String> m; 
  17.     ExpandableListView elvMain; 
  18.  
  19.  
  20.     @Override 
  21.     protected void onCreate(Bundle savedInstanceState) { 
  22.         super.onCreate(savedInstanceState); 
  23.         setContentView(R.layout.activity_main); 
  24.         elvMain = (ExpandableListView)findViewById(R.id.elvMain); 
  25.  
  26.         groupData = new ArrayList<Map<String, String>>(); 
  27.         for (String group : groups) { 
  28.             m = new HashMap<String, String>(); 
  29.             m.put("groupName", group); 
  30.             groupData.add(m); 
  31.         } 
  32.         String groupFrom[] = new String[]{"groupName"}; 
  33.         int groupTo[] = new int[] {android.R.id.text1}; 
  34.  
  35.         childData = new ArrayList<ArrayList<Map<String, String>>>(); 
  36.         childDataItem = new ArrayList<Map<String, String>>(); 
  37.         // заполняем список аттрибутов для каждого элемента 
  38.         for (int i = 0; i < phonesHTC.length; i++) { 
  39.             m = new HashMap<String, String>(); 
  40.             m.put("phoneName", phonesHTC[i]); 
  41.             m.put("colorName", colors[i]); 
  42.             m.put("price", prices[i]); 
  43.             childDataItem.add(m); 
  44.         } 
  45.         // добавляем в коллекцию коллекций 
  46.         childData.add(childDataItem); 
  47.  
  48.         // создаем коллекцию элементов для второй группы 
  49.         childDataItem = new ArrayList<Map<String, String>>(); 
  50.         for (int i = 0; i < phonesSams.length; i++) { 
  51.             m = new HashMap<String, String>(); 
  52.             m.put("phoneName", phonesSams[i]); 
  53.             m.put("colorName", colors[i]); 
  54.             m.put("price", prices[i]); 
  55.             childDataItem.add(m); 
  56.         } 
  57.         childData.add(childDataItem); 
  58.  
  59.         // создаем коллекцию элементов для третьей группы 
  60.         childDataItem = new ArrayList<Map<String, String>>(); 
  61.         for (int i = 0; i < phonesLG.length; i++) { 
  62.             m = new HashMap<String, String>(); 
  63.             m.put("phoneName", phonesLG[i]); 
  64.             m.put("colorName", colors[i]); 
  65.             m.put("price", prices[i]); 
  66.             childDataItem.add(m); 
  67.         } 
  68.         childData.add(childDataItem); 
  69.  
  70.         // список аттрибутов элементов для чтения 
  71.         String childFrom[] = new String[] {"phoneName", "colorName", "price"}; 
  72.         // список ID view-элементов, в которые будет помещены аттрибуты элементов 
  73.         int childTo[] = new int[] {R.id.tv1, R.id.tv2, R.id.tv3}; 
  74.  
  75.  
  76.         SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter( 
  77.                 this, 
  78.                 groupData, 
  79.                 android.R.layout.simple_expandable_list_item_1, 
  80.                 groupFrom, 
  81.                 groupTo, 
  82.                 childData, 
  83.                 R.layout.smartphone_field, 
  84.                 childFrom, 
  85.                 childTo); 
  86.  
  87.         elvMain.setAdapter(adapter); 
  88.     } 


smartphone_field.xml:
Код: [ Загрузить ] [ Скрыть ]
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="horizontal" android:layout_width="fill_parent" 
  4.     android:layout_height="wrap_content"> 
  5.     <TextView 
  6.         android:id="@+id/tv1" 
  7.         android:layout_weight="1" 
  8.         android:layout_width="wrap_content" 
  9.         android:layout_height="wrap_content" /> 
  10.     <TextView 
  11.         android:id="@+id/tv2" 
  12.         android:layout_weight="1" 
  13.         android:layout_width="wrap_content" 
  14.         android:layout_height="wrap_content" /> 
  15.     <TextView 
  16.         android:id="@+id/tv3" 
  17.         android:layout_weight="1" 
  18.         android:layout_width="wrap_content" 
  19.         android:layout_height="wrap_content" /> 
  20. </LinearLayout> 


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 30 июл 2015, 03:26 

Зарегистрирован: 06 июн 2015, 13:47
Сообщений: 7
Благодарил (а): 6 раз.
Поблагодарили: 1 раз.
Цитата:
А вообще вы можете создать для элементов свой layout, например, с тремя TextView. И к каждому элементу списка (Map) добавить еще по два атрибута: цена и цвет. Далее указываете ваш layout в конструкторе, формируете соответственно массивы childFrom и childTo чтобы сопоставить атрибуты и TextView, и получится, что каждый элемент группы содержит более подробную информацию о смартфоне.


stas, Neustart, Arch1e
Моя реализация, может кому поможет:
MainActivity:
Код: [ Загрузить ] [ Скрыть ]
  1. public class MainActivity extends Activity { 
  2.  
  3.     String[] groups = new String[] {"HTC", "Samsung", "LG"}; 
  4.     String[] phonesHTC = new String[] {"Sensation", "Desire", "Wildfire", "Hero"}; 
  5.     String[] phonesSams = new String[] {"Galaxy S II", "Galaxy Nexus", "Wave", "Absolute"}; 
  6.     String[] phonesLG = new String[] {"Optimus", "Optimus Link", "Optimus Black", "Optimus One"}; 
  7.     String[] colors = new String[] {"Black", "Blue", "White", "Pink"}; 
  8.     String[] prices = new String[] {"400$", "350$", "500$", "200$"}; 
  9.  
  10.     ArrayList<Map<String, String>> groupData; 
  11.     ArrayList<Map<String, String>> childDataItem; 
  12.     ArrayList<ArrayList<Map<String, String>>> childData; 
  13.     // childData = ArrayList<childDataItem> 
  14.  
  15.     // список аттрибутов группы или элемента 
  16.     Map<String, String> m; 
  17.     ExpandableListView elvMain; 
  18.  
  19.  
  20.     @Override 
  21.     protected void onCreate(Bundle savedInstanceState) { 
  22.         super.onCreate(savedInstanceState); 
  23.         setContentView(R.layout.activity_main); 
  24.         elvMain = (ExpandableListView)findViewById(R.id.elvMain); 
  25.  
  26.         groupData = new ArrayList<Map<String, String>>(); 
  27.         for (String group : groups) { 
  28.             m = new HashMap<String, String>(); 
  29.             m.put("groupName", group); 
  30.             groupData.add(m); 
  31.         } 
  32.         String groupFrom[] = new String[]{"groupName"}; 
  33.         int groupTo[] = new int[] {android.R.id.text1}; 
  34.  
  35.         childData = new ArrayList<ArrayList<Map<String, String>>>(); 
  36.         childDataItem = new ArrayList<Map<String, String>>(); 
  37.         // заполняем список аттрибутов для каждого элемента 
  38.         for (int i = 0; i < phonesHTC.length; i++) { 
  39.             m = new HashMap<String, String>(); 
  40.             m.put("phoneName", phonesHTC[i]); 
  41.             m.put("colorName", colors[i]); 
  42.             m.put("price", prices[i]); 
  43.             childDataItem.add(m); 
  44.         } 
  45.         // добавляем в коллекцию коллекций 
  46.         childData.add(childDataItem); 
  47.  
  48.         // создаем коллекцию элементов для второй группы 
  49.         childDataItem = new ArrayList<Map<String, String>>(); 
  50.         for (int i = 0; i < phonesSams.length; i++) { 
  51.             m = new HashMap<String, String>(); 
  52.             m.put("phoneName", phonesSams[i]); 
  53.             m.put("colorName", colors[i]); 
  54.             m.put("price", prices[i]); 
  55.             childDataItem.add(m); 
  56.         } 
  57.         childData.add(childDataItem); 
  58.  
  59.         // создаем коллекцию элементов для третьей группы 
  60.         childDataItem = new ArrayList<Map<String, String>>(); 
  61.         for (int i = 0; i < phonesLG.length; i++) { 
  62.             m = new HashMap<String, String>(); 
  63.             m.put("phoneName", phonesLG[i]); 
  64.             m.put("colorName", colors[i]); 
  65.             m.put("price", prices[i]); 
  66.             childDataItem.add(m); 
  67.         } 
  68.         childData.add(childDataItem); 
  69.  
  70.         // список аттрибутов элементов для чтения 
  71.         String childFrom[] = new String[] {"phoneName", "colorName", "price"}; 
  72.         // список ID view-элементов, в которые будет помещены аттрибуты элементов 
  73.         int childTo[] = new int[] {R.id.tv1, R.id.tv2, R.id.tv3}; 
  74.  
  75.  
  76.         SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter( 
  77.                 this, 
  78.                 groupData, 
  79.                 android.R.layout.simple_expandable_list_item_1, 
  80.                 groupFrom, 
  81.                 groupTo, 
  82.                 childData, 
  83.                 R.layout.smartphone_field, 
  84.                 childFrom, 
  85.                 childTo); 
  86.  
  87.         elvMain.setAdapter(adapter); 
  88.     } 


smartphone_field.xml:
Код: [ Загрузить ] [ Скрыть ]
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="horizontal" android:layout_width="fill_parent" 
  4.     android:layout_height="wrap_content"> 
  5.     <TextView 
  6.         android:id="@+id/tv1" 
  7.         android:layout_weight="1" 
  8.         android:layout_width="wrap_content" 
  9.         android:layout_height="wrap_content" /> 
  10.     <TextView 
  11.         android:id="@+id/tv2" 
  12.         android:layout_weight="1" 
  13.         android:layout_width="wrap_content" 
  14.         android:layout_height="wrap_content" /> 
  15.     <TextView 
  16.         android:id="@+id/tv3" 
  17.         android:layout_weight="1" 
  18.         android:layout_width="wrap_content" 
  19.         android:layout_height="wrap_content" /> 
  20. </LinearLayout> 


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 09 дек 2015, 09:52 

Зарегистрирован: 09 дек 2015, 09:49
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Добрый день, подскажите, как удалить группу в ExpandableListView.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 09 фев 2016, 15:10 

Зарегистрирован: 27 янв 2016, 14:16
Сообщений: 7
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
energo5 писал(а):
Добрый день, подскажите, как удалить группу в ExpandableListView.

как вариант
Код: [ Загрузить ] [ Скрыть ]
  1. groupData.remove(0); 
  2.         childData.remove(0); 
  3.         adapter = new SimpleExpandableListAdapter(this, 
  4.                 groupData, android.R.layout.simple_expandable_list_item_2, 
  5.                 groupFrom, 
  6.                 groupTo, 
  7.                 childData, 
  8.                 android.R.layout.simple_expandable_list_item_2, 
  9.                 childFrom, 
  10.                 childTo); 
  11.         elvMain.setAdapter(adapter); 


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 09 фев 2016, 15:17 

Зарегистрирован: 27 янв 2016, 14:16
Сообщений: 7
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Если вдруг кто не понимает для чего нужны Map<String, String> как основной элемент списка (я пол часа сидел, думал, не мог понять), то при изменении кода на такой:

Код: [ Загрузить ] [ Скрыть ]
  1. for (String group : groups) { 
  2.             m = new HashMap<String, String>(); 
  3.             m.put("groupName", group); 
  4.             m.put("groupName1", "hahaha"); 
  5.             groupData.add(m); 
  6.         } 
  7. String[] groupFrom = new String[] {"groupName", "groupName1"}; 
  8. int[] groupTo = new int[] {android.R.id.text1, android.R.id.text2}; 


Код: [ Загрузить ] [ Скрыть ]
  1. childDataItem = new ArrayList<>(); 
  2.         for (String phone : phonesLG) { 
  3.             m = new HashMap<>(); 
  4.             m.put("phoneName", phone); 
  5.             m.put("phoneName1", "lalala"); 
  6.             childDataItem.add(m); 
  7.         } 
  8.         childData.add(childDataItem); 
  9.  
  10.         String[] childFrom = new String[] {"phoneName1", "phoneName"}; 
  11.         int[] childTo = new int[] {android.R.id.text1, android.R.id.text2}; 


Код: [ Загрузить ] [ Скрыть ]
  1. SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(this, 
  2.                 groupData, android.R.layout.simple_expandable_list_item_2, 
  3.                 groupFrom, 
  4.                 groupTo, 
  5.                 childData, 
  6.                 android.R.layout.simple_expandable_list_item_2, 
  7.                 childFrom, 
  8.                 childTo); 

получится вот такой список


Вложения:
Безымянный.png
Безымянный.png [ 33.96 KiB | Просмотров: 3808 ]
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 22 мар 2016, 22:23 

Зарегистрирован: 22 мар 2016, 22:13
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Сразу скажу, что код не из этого урока...
Как переделать адаптер, чтобы в ExpandableListView в child элементах находились определённые картинки?
В идеале конечно ловить название пункта и выводить соответствующую ему картинку...

Код основной активности: (Тут ловим выбранный пункт по слову и запускаем нужную активность...)
Код: [ Загрузить ] [ Скрыть ]
  1. public class Name extends Activity implements 
  2.         SearchView.OnQueryTextListener, SearchView.OnCloseListener { 
  3.  
  4.     private SearchView mSearchView; 
  5.     private FishNameExpandableListAdapter mAdapter; 
  6.     private ExpandableListView mExpandableListView; 
  7.     private ArrayList continentList = new ArrayList<FishNameContinent>(); 
  8.  
  9.     @Override 
  10.     public void onCreate(Bundle savedInstanceState) { 
  11.         super.onCreate(savedInstanceState); 
  12.  
  13.         setContentView(R.layout.name); 
  14.  
  15.         SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
  16.         mSearchView = (SearchView) findViewById(R.id.searchViewFishName); 
  17.         mSearchView.setVisibility(View.GONE); 
  18.         mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
  19.  
  20.         final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
  21.  
  22.         displayList(); 
  23.         expandAll(); 
  24.         collapseAll(); 
  25.  
  26.         fab.setOnClickListener(new View.OnClickListener() { 
  27.             @Override 
  28.             public void onClick(View v) { 
  29.  
  30.                 Animation openSearch = AnimationUtils.loadAnimation(FishName.this, android.R.anim.slide_in_left); 
  31.                 mSearchView.startAnimation(openSearch); 
  32.                 mSearchView.setVisibility(View.VISIBLE); 
  33.  
  34.                 Animation hideFab = AnimationUtils.loadAnimation(FishName.this, android.R.anim.slide_out_right); 
  35.                 fab.startAnimation(hideFab); 
  36.                 fab.setVisibility(View.GONE); 
  37.  
  38.                 // открываем клавиатуру и активируем searchView 
  39.                 mSearchView.requestFocus(); 
  40.                 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
  41.                 imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
  42.                 mSearchView.setIconifiedByDefault(false); 
  43.                 mSearchView.setOnQueryTextListener(FishName.this); 
  44.                 mSearchView.setOnCloseListener(FishName.this); 
  45.             } 
  46.         }); 
  47.  
  48.         // нажатие на элемент 
  49.         mExpandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
  50.  
  51.             public boolean onChildClick(ExpandableListView parent, View convertView, 
  52.                                         int groupPosition, int childPosition, long id) { 
  53.  
  54.                 RelativeLayout relativeLayout = (RelativeLayout )convertView; 
  55.                 TextView textView = (TextView) relativeLayout.findViewById(R.id.namerow); 
  56.  
  57.                 String childText = textView.getText().toString(); // получаем текст нажатого элемента 
  58.  
  59.                 //названия: 
  60.                 if (childText == "Анабас") {Intent i = new Intent(FishName.this, Anabas.class);startActivity(i);}; 
  61.                 if (childText == "Ктенопома") {Intent i = new Intent(FishName.this, Ktenopoma.class);startActivity(i);}; 
  62.                  
  63.             } 
  64.  
  65.         }); 
  66.     } 
  67.  
  68.     //метод закрытия групп 
  69.     private void collapseAll() { 
  70.         int count = mAdapter.getGroupCount(); 
  71.         for (int i = 0; i < count; i++){ 
  72.             mExpandableListView.collapseGroup(i); 
  73.         } 
  74.     } 
  75.     //метод открытия групп 
  76.     private void expandAll() { 
  77.         int count = mAdapter.getGroupCount(); 
  78.         for (int i = 0; i < count; i++) { 
  79.             mExpandableListView.expandGroup(i); 
  80.         } 
  81.     } 
  82.  
  83.     private void displayList() { 
  84.         loadSomeData(); 
  85.         mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListViewFishName); 
  86.         mAdapter = new FishNameExpandableListAdapter(FishName.this, continentList); 
  87.         mExpandableListView.setAdapter(mAdapter); 
  88.  
  89.     } 
  90.  
  91.     private void loadSomeData() { 
  92.        ArrayList countryList = new ArrayList<FishNamePopulation>(); 
  93.         FishNamePopulation worldPopulation = new FishNamePopulation("Анабас"); 
  94.         countryList.add(worldPopulation); 
  95.         worldPopulation = new FishNamePopulation("Ктенопома"); 
  96.         countryList.add(worldPopulation); 
  97.  
  98.         FishNameContinent continent = new FishNameContinent("Анабасовые", countryList); 
  99.         continentList.add(continent); 
  100.  
  101.     } 
  102.  
  103.     @Override 
  104.     public boolean onClose() { 
  105.         mAdapter.filterData(""); 
  106.         expandAll(); 
  107.         return false; 
  108.     } 
  109.  
  110.     @Override 
  111.     public boolean onQueryTextSubmit(String query) { 
  112.         mAdapter.filterData(query); 
  113.         expandAll(); 
  114.         return false; 
  115.     } 
  116.  
  117.     @Override 
  118.     public boolean onQueryTextChange(String query) { 
  119.         mAdapter.filterData(query); 
  120.         expandAll(); 
  121.         return false; 
  122.     } 
  123.  

Далее класс для отображения заголовков:
Код: [ Загрузить ] [ Скрыть ]
  1. public class FishNameContinent { 
  2.     private String mName; 
  3.     private List<FishNamePopulation> mCountryList = new ArrayList<FishNamePopulation>(); 
  4.  
  5.     public FishNameContinent(String name, ArrayList<FishNamePopulation> countryList) { 
  6.         this.mName = name; 
  7.         this.mCountryList = countryList; 
  8.     } 
  9.  
  10.     public String getName() { 
  11.         return mName; 
  12.     } 
  13.  
  14.     public void setName(String name) { 
  15.         this.mName = name; 
  16.     } 
  17.  
  18.     public ArrayList<FishNamePopulation> getCountryList() { 
  19.         return (ArrayList<FishNamePopulation>) mCountryList; 
  20.     } 
  21.  
  22.     public void setCountryList(ArrayList<FishNamePopulation> countryList) { 
  23.         this.mCountryList = countryList; 
  24.     }; 

Класс для названий в child:
Код: [ Загрузить ] [ Скрыть ]
  1. public class FishNamePopulation { 
  2.     private String mCountry; 
  3.  
  4.     public FishNamePopulation(String country) { 
  5.         this.mCountry = country; 
  6.     } 
  7.  
  8.     public String getCountry() { 
  9.         return this.mCountry; 
  10.     } 
  11.  
  12.     public void setCountry(String country) { 
  13.         this.mCountry = country; 
  14.     } 
  15.  
  16.  

Ну и собственно сам класс адаптера:
Код: [ Загрузить ] [ Скрыть ]
  1. public class FishNameExpandableListAdapter extends BaseExpandableListAdapter { 
  2.  
  3.     private Context mContext; 
  4.     private ArrayList<FishNameContinent> mContinentList; 
  5.     private ArrayList<FishNameContinent> mOriginalList; 
  6.  
  7.     private LayoutInflater mInflater; 
  8.     private List<FishNamePopulation> mWorldpopulationlist = null; 
  9.     private ArrayList<FishNamePopulation> mArraylist; 
  10.  
  11.     public FishNameExpandableListAdapter(Context context, 
  12.                                      ArrayList<FishNameContinent> continentList) { 
  13.         this.mContext = context; 
  14.  
  15.         this.mContinentList = new ArrayList<>(); 
  16.         this.mContinentList.addAll(continentList); 
  17.  
  18.         this.mOriginalList = new ArrayList<>(); 
  19.         this.mOriginalList.addAll(continentList); 
  20.     } 
  21.  
  22.     public class ViewHolder { 
  23.         TextView country; 
  24.         TextView population; 
  25.         ImageView flag; // добавлено 
  26.     } 
  27.  
  28.     @Override 
  29.     public int getGroupCount() { 
  30.         return mContinentList.size(); 
  31.     } 
  32.  
  33.     @Override 
  34.     public int getChildrenCount(int groupPosition) { 
  35.         ArrayList<FishNamePopulation> countryList = mContinentList.get( 
  36.                 groupPosition).getCountryList(); 
  37.         return countryList.size(); 
  38.     } 
  39.  
  40.     @Override 
  41.     public Object getGroup(int groupPosition) { 
  42.         return mContinentList.get(groupPosition); 
  43.     } 
  44.  
  45.     @Override 
  46.     public Object getChild(int groupPosition, int childPosition) { 
  47.         ArrayList<FishNamePopulation> countryList = mContinentList.get( 
  48.                 groupPosition).getCountryList(); 
  49.         return countryList.get(childPosition); 
  50.     } 
  51.  
  52.     @Override 
  53.     public long getGroupId(int groupPosition) { 
  54.         return groupPosition; 
  55.     } 
  56.  
  57.     @Override 
  58.     public long getChildId(int groupPosition, int childPosition) { 
  59.         return childPosition; 
  60.     } 
  61.  
  62.     @Override 
  63.     public boolean hasStableIds() { 
  64.         return true; 
  65.     } 
  66.  
  67.     @Override 
  68.     public View getGroupView(int groupPosition, boolean isExpanded, 
  69.                              View convertView, ViewGroup parent) { 
  70.         FishNameContinent continent = (FishNameContinent) getGroup(groupPosition); 
  71.         if (convertView == null) { 
  72.             LayoutInflater layoutInflater = (LayoutInflater) mContext 
  73.                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  74.             convertView = layoutInflater.inflate(R.layout.group_row, null); 
  75.  
  76.         } 
  77.  
  78.         TextView tvHeading = (TextView) convertView.findViewById(R.id.heading); 
  79.         tvHeading.setText(continent.getName().trim()); 
  80.  
  81.         return convertView; 
  82.     } 
  83.  
  84.     @Override 
  85.     public View getChildView(int groupPosition, int childPosition, 
  86.                              boolean isLastChild, View convertView, ViewGroup parent) { 
  87.         FishNamePopulation worldpopulation = (FishNamePopulation) getChild( 
  88.                 groupPosition, childPosition); 
  89.  
  90.  
  91.         if (convertView == null) { 
  92.             LayoutInflater layoutInflater = (LayoutInflater) mContext 
  93.                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  94.             convertView = layoutInflater.inflate(R.layout.child_row, null); 
  95.         } 
  96.  
  97.         TextView tvName = (TextView) convertView.findViewById(R.id.namerow); 
  98.         tvName.setText(worldpopulation.getCountry().trim()); 
  99.  
  100.         return convertView; 
  101.     } 
  102.  
  103.     @Override 
  104.     public boolean isChildSelectable(int groupPosition, int childPosition) { 
  105.         return true; 
  106.     } 
  107.  
  108.     public void filterData(String query) { 
  109.  
  110.         query = query.toLowerCase(); 
  111.         Log.v("MyAdapter", String.valueOf(mContinentList.size())); 
  112.         mContinentList.clear(); 
  113.  
  114.         if (query.isEmpty()) { 
  115.             mContinentList.addAll(mOriginalList); 
  116.         } else { 
  117.  
  118.             for (FishNameContinent continent : mOriginalList) { 
  119.  
  120.                 ArrayList<FishNamePopulation> countryList = continent 
  121.                         .getCountryList(); 
  122.                 ArrayList<FishNamePopulation> newList = new ArrayList<FishNamePopulation>(); 
  123.                 for (FishNamePopulation country : countryList) { 
  124.                     if (country.getCountry().toLowerCase() 
  125.                             .contains(query)) { 
  126.                         newList.add(country); 
  127.                     } 
  128.                 } 
  129.                 if (newList.size() > 0) { 
  130.                     FishNameContinent nContinent = new FishNameContinent(continent.getName(), 
  131.                             newList); 
  132.                     mContinentList.add(nContinent); 
  133.                 } 
  134.             } 
  135.         } 
  136.  
  137.         Log.v("MyAdapter", String.valueOf(mContinentList.size())); 
  138.         notifyDataSetChanged(); 
  139.     } 


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 01 июн 2016, 12:28 

Зарегистрирован: 01 июн 2016, 12:23
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Добрый день, подскажите пожалуйста. У меня возникла такая ситуация:
я динамически заполняю список т.е. я беру все данные внутри составного обьекта, формирую список групп, далее добавляю их в android.R.id.text1 и начинаю заполнять "детей" и проделываю теже действия.
В результате у меня в первой (из N) группе содержатся ВСЕ "дети" от всех групп, а при попытке открыть другие группы - вылет. Переписывал многое количество раз, но никак не пойму почему не происходит соответствие Группа - Дети

Код: [ Загрузить ] [ Скрыть ]
  1.     void showContextDefenitionList(ContextDefinitionList cDefinitionList) { 
  2.  
  3.             Map<String, String> map; 
  4.             // коллекция для групп 
  5.             ArrayList<Map<String, String>> groupDataList = new ArrayList<Map<String, String>>(); 
  6.             // заполняем коллекцию групп из массива с названиями групп 
  7.  
  8.             for (int i =0; i< cDefinitionList.getContextList().size(); i++) { 
  9.                 // заполняем список атрибутов для каждой группы 
  10.                 map = new HashMap(); 
  11.                 map.put("groupName", cDefinitionList.getContextList().get(i).getName()); // имя контекста 
  12.                 groupDataList.add(map); 
  13.             } 
  14.  
  15. // список атрибутов групп для чтения 
  16. String groupFrom[] = new String[] { "groupName" }; 
  17. // список ID view-элементов, в которые будет помещены атрибуты групп 
  18. int groupTo[] = new int[] { android.R.id.text1 }; 
  19.  
  20.  
  21.             // создаем общую коллекцию для коллекций элементов 
  22.             ArrayList<ArrayList<Map<String, String>>> сhildDataList = new ArrayList<ArrayList<Map<String, String>>>(); 
  23.  
  24.             // в итоге получится сhildDataList = ArrayList<сhildDataItemList> 
  25.  
  26.             // создаем коллекцию элементов для первой группы 
  27.             ArrayList<Map<String, String>> сhildDataItemList = new ArrayList<Map<String, String>>(); 
  28.             // заполняем список атрибутов для каждого элемента 
  29.  
  30.  
  31.         for (int i =0; i< cDefinitionList.getContextList().size(); i++) { 
  32.         //int i = 1; 
  33.             for (int j = 0; j < cDefinitionList.getContextList().get(i).getList().size(); j++) { 
  34.                 map = new HashMap(); 
  35.                 map.put("sensorName", cDefinitionList.getContextList().get(i).getList().get(j).getSensorName() + ": " + cDefinitionList.getContextList().get(i).getList().get(j).getSensorData()); // имя и данные с сенсора 
  36.                 сhildDataItemList.add(map); 
  37.             } 
  38.             // добавляем в коллекцию коллекций 
  39.             сhildDataList.add(сhildDataItemList); 
  40.         } 
  41.  
  42. // список атрибутов элементов для чтения 
  43. String childFrom[] = new String[] { "sensorName" }; 
  44. // список ID view-элементов, в которые будет помещены атрибуты 
  45. // элементов 
  46. int childTo[] = new int[] { android.R.id.text1 }; 
  47.  
  48.             SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter( 
  49.                     this, groupDataList, 
  50.                     android.R.layout.simple_expandable_list_item_1, groupFrom, 
  51.                     groupTo, сhildDataList, android.R.layout.simple_list_item_1, 
  52.                     childFrom, childTo); 
  53.  
  54.             ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.expandableListView); 
  55.             expandableListView.setAdapter(adapter); 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 01 июн 2016, 14:44 

Зарегистрирован: 01 июн 2016, 12:23
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Кажется нашел ответ ... я не обнулял коллекцию детей...

Код: [ Загрузить ] [ Скрыть ]
  1. [color=#FF0000]...[/color] 
  2. for (int i =0; i< cDefinitionList.getContextList().size(); i++) { 
  3.         //int i = 1; 
  4.         // создаем коллекцию элементов для каждой группы 
  5.         ArrayList<Map<String, String>> сhildDataItemList = new ArrayList<Map<String, String>>(); 
  6.             for (int j = 0; j < cDefinitionList.getContextList().get(i).getList().size(); j++) { 
  7.                 map = new HashMap(); 
  8.                 map.put("sensorName", cDefinitionList.getContextList().get(i).getList().get(j).getSensorName() + ": " + cDefinitionList.getContextList().get(i).getList().get(j).getSensorData()); // название месяца 
  9.                 сhildDataItemList.add(map); 
  10.             } 
  11.             // добавляем в коллекцию коллекций 
  12.             сhildDataList.add(сhildDataItemList); 
  13.         } 
  14.  
  15. [color=#FF0000]...[/color] 


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 11 июл 2016, 12:24 
Аватар пользователя

Зарегистрирован: 07 июл 2016, 21:49
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Можно картинку как это выглядит на экране?
Не могу понять это то что мне нужно или нет?

У меня есть две таблички в SQLite, связанные отношением один-ко-многим. Хочу сделать выбор "Родительский элемент" -> выпадающий список элементов группы. + Множественный выбор с чекбоксами у каждого элемента, но это уже прикручу как сделано в уроке 54.

Какой адаптер вообще выбрать в таком случае? ExpandableListView или SimpleCursorTreeAdapter?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 11 июл 2016, 15:49 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
ExpandableListView это не адаптер. Это вью для показа дерева.

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 07 июн 2018, 16:12 

Зарегистрирован: 07 июн 2018, 16:09
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
You can refer below resource with good examples on sorting,

http://www.flowerbrackets.com/two-best- ... ing-array/


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 178 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB