Урок 45. Список-дерево ExpandableListView

Обсуждение уроков
danik
Сообщения: 3
Зарегистрирован: 07 июл 2012, 12:48
Откуда: где? где? в Караганде!

Re: Урок 45. Список-дерево ExpandableListView

Сообщение danik » 05 окт 2012, 21:44

Здравствуйте, форумчане!

У меня проблема не по уроку, или по уроку, пока не пойму... но проблема такова: у меня eclipse не хочет ранить именно этот урок. Когда он начинает делать compile, загрузка программы на эмулятор идет как будто бесконечно. Когда я пытаюсь закрыть эклипс, то он не закрывается, ждет завершения процесса загрузки проекта в эмулятор. После закрытия проекта с помощью Диспетчера Задач, ТОТАЛ Командер не может куда-либо скопировать этот проект. Но после перезагрузки компа, и предварительно не ранить проект в эклипсе, то ТОТАЛ скопирует проект.

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

Please, help me

beeline09
Сообщения: 33
Зарегистрирован: 23 сен 2012, 23:10

Re: Урок 45. Список-дерево ExpandableListView

Сообщение beeline09 » 23 окт 2012, 14:59

Скажите пожалуйста, а как переделать данный урок так, чтоб для каждой группы показывались свои изображения из assets, а для каждой подгруппы...тоже свои изображения из assets)) ?
Сейчас начнете типа пиши свой кастомный адаптер и т.п. Я еще не догоняю все это. Просто мне нужно реализовать данную возможность, а понять как модифицировать адаптер не могу.
предполагаю, что нужно будет для групп и подгрупп (естественно) заводить массив строк, в котором будут храниться пути к файлам изображений в assets. В общем, это для меня пока сложно, но очень необходимо в данный момент. Прошу помощи в написании подобного адаптера.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 45. Список-дерево ExpandableListView

Сообщение damager82 » 24 окт 2012, 10:39

beeline09 писал(а):Скажите пожалуйста, а как переделать данный урок так, чтоб для каждой группы показывались свои изображения из assets, а для каждой подгруппы...тоже свои изображения из assets)) ?
Я склеил SimpleExpandableListAdapter и SimpleAdapter, чтобы результат умел работать не только с TextView, но и с ImageView. Странно, что этого не сделали по-дефолту. Посмотрите Урок 48 про SimpleAdapter, чтобы понять механизм.

Файлы в архиве:

MyExpAdapter.java - получившийся адаптер

MainAct.java - пример из Урока 45, заточенный под новый адаптер. Сейчас везде вставляется одна и та же картинка. Меняйте ее на свои. Работает как указание id (R.drawable.icon), так и указание имени файла из assets ("icon.png").

item_group.xml - layout для группы. Обратите внимание на атрибут android:paddingLeft. Он нужен, чтобы был отступ.

item_child.xml - layout для элемента

layout-файлы меняйте, как вам нужно.

Делал поверхностно, возможны баги. Потестируйте.
Вложения
MyExpAdapter.7z
(3.76 КБ) 361 скачивание
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

beeline09
Сообщения: 33
Зарегистрирован: 23 сен 2012, 23:10

Re: Урок 45. Список-дерево ExpandableListView

Сообщение beeline09 » 24 окт 2012, 11:22

damager82 писал(а):
beeline09 писал(а):Скажите пожалуйста, а как переделать данный урок так, чтоб для каждой группы показывались свои изображения из assets, а для каждой подгруппы...тоже свои изображения из assets)) ?
Я склеил SimpleExpandableListAdapter и SimpleAdapter, чтобы результат умел работать не только с TextView, но и с ImageView. Странно, что этого не сделали по-дефолту. Посмотрите Урок 48 про SimpleAdapter, чтобы понять механизм.

Файлы в архиве:

MyExpAdapter.java - получившийся адаптер

MainAct.java - пример из Урока 45, заточенный под новый адаптер. Сейчас везде вставляется одна и та же картинка. Меняйте ее на свои. Работает как указание id (R.drawable.icon), так и указание имени файла из assets ("icon.png").

item_group.xml - layout для группы. Обратите внимание на атрибут android:paddingLeft. Он нужен, чтобы был отступ.

item_child.xml - layout для элемента

layout-файлы меняйте, как вам нужно.

Делал поверхностно, возможны баги. Потестируйте.
Что-то не понимаю почему, но не работает-вываливается с ошибкой. Не пойму. Все должно работать, а ошибку так понять и не могу... Вот лог:
  • 10-24 12:15:39.300: E/AndroidRuntime(16726): FATAL EXCEPTION: main
    10-24 12:15:39.300: E/AndroidRuntime(16726): java.lang.NullPointerException
    10-24 12:15:39.300: E/AndroidRuntime(16726): at com.popvtest.adg.MyExpAdapter.setViewImage(MyExpAdapter.java:168)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at com.popvtest.adg.MyExpAdapter.bindView(MyExpAdapter.java:135)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at com.popvtest.adg.MyExpAdapter.getGroupView(MyExpAdapter.java:201)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:445)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.widget.AbsListView.obtainView(AbsListView.java:2033)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.widget.ListView.onMeasure(ListView.java:1155)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.view.View.measure(View.java:12723)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.widget.RelativeLayout.measureChild(RelativeLayout.java:579)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:392)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.view.View.measure(View.java:12723)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.view.View.measure(View.java:12723)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.widget.LinearLayout.measureVertical(LinearLayout.java:816)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.widget.LinearLayout.onMeasure(LinearLayout.java:557)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.view.View.measure(View.java:12723)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.view.View.measure(View.java:12723)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.os.Handler.dispatchMessage(Handler.java:99)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.os.Looper.loop(Looper.java:137)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at android.app.ActivityThread.main(ActivityThread.java:4471)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at java.lang.reflect.Method.invokeNative(Native Method)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at java.lang.reflect.Method.invoke(Method.java:511)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
    10-24 12:15:39.300: E/AndroidRuntime(16726): at dalvik.system.NativeStart.main(Native Method)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 45. Список-дерево ExpandableListView

Сообщение rezak90 » 24 окт 2012, 13:26

Зачем совмещать адптеры? Есть же BaseExpandableListAdapter. Я делал так: передавал список из Map. getGroupView загружает лейаут свёрнутого списка, а getChildView его развёрнутого.
Вот проект: http://zalil.ru/33885924
Изображение
Развёрнутый:
Изображение

З.Ы. Программа каждыйе 5 сек (а может и меньше, уже не помню) обновляет данные с сервера и отображает валюты, и как они изменились за последние 5 сек (стрелки показывают упал курс или нет). Задумывалась всё как в качестве урока сделать, но руки не доходят (а прошло с тех пор уже 3 месяца).
R.id.team
Политика на форуме запрещена

denisneposeda
Сообщения: 19
Зарегистрирован: 30 дек 2012, 10:43

Re: Урок 45. Список-дерево ExpandableListView

Сообщение denisneposeda » 02 янв 2013, 22:52

Можно для вывода дочернего списка элементов прописать различные Layouts? То бишь...один элемент должен принимать 4 атрибута и иметь один вид, второй принимает 6 элементов и имеет другой вид.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 45. Список-дерево ExpandableListView

Сообщение rezak90 » 02 янв 2013, 23:33

конечно можно
R.id.team
Политика на форуме запрещена

denisneposeda
Сообщения: 19
Зарегистрирован: 30 дек 2012, 10:43

Re: Урок 45. Список-дерево ExpandableListView

Сообщение denisneposeda » 02 янв 2013, 23:39

rezak90 писал(а):конечно можно
Можно пример?...где это хотя бы реализовать...

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 45. Список-дерево ExpandableListView

Сообщение rezak90 » 03 янв 2013, 00:30

есть же два метода getChildView и getGroupView, в них исходя от входных данных подсовывайте любую разметку
R.id.team
Политика на форуме запрещена

denisneposeda
Сообщения: 19
Зарегистрирован: 30 дек 2012, 10:43

Re: Урок 45. Список-дерево ExpandableListView

Сообщение denisneposeda » 03 янв 2013, 02:20

rezak90 писал(а):есть же два метода getChildView и getGroupView, в них исходя от входных данных подсовывайте любую разметку
т.е. при формировании в адаптере идет вызов этих методов? и там уже цеплять все? так?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 45. Список-дерево ExpandableListView

Сообщение rezak90 » 03 янв 2013, 09:00

да, всё верно
R.id.team
Политика на форуме запрещена

denisneposeda
Сообщения: 19
Зарегистрирован: 30 дек 2012, 10:43

Re: Урок 45. Список-дерево ExpandableListView

Сообщение denisneposeda » 03 янв 2013, 11:26

rezak90 писал(а):да, всё верно
А вот когда в адаптере параметры указываются layout...с ним что делать?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 45. Список-дерево ExpandableListView

Сообщение rezak90 » 03 янв 2013, 18:56

вы хоть кастомный адаптер пишите? там в тех метода что я указал, инфлейтите тот лейаут который хотите и т.д.
R.id.team
Политика на форуме запрещена

denisneposeda
Сообщения: 19
Зарегистрирован: 30 дек 2012, 10:43

Re: Урок 45. Список-дерево ExpandableListView

Сообщение denisneposeda » 03 янв 2013, 21:28

rezak90 писал(а):вы хоть кастомный адаптер пишите? там в тех метода что я указал, инфлейтите тот лейаут который хотите и т.д.
Использую из урока...

Код: Выделить всё

SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
            this,
            groupData,
            android.R.layout.simple_expandable_list_item_1,
            groupFrom,
            groupTo,
            childData,
            android.R.layout.simple_list_item_1,
            childFrom,
            childTo);

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 45. Список-дерево ExpandableListView

Сообщение rezak90 » 03 янв 2013, 21:57

ну здесь вам не судьба использовать два лейаута))) конечно же в таких делах нужно свой писать
R.id.team
Политика на форуме запрещена

denisneposeda
Сообщения: 19
Зарегистрирован: 30 дек 2012, 10:43

Re: Урок 45. Список-дерево ExpandableListView

Сообщение denisneposeda » 03 янв 2013, 22:58

rezak90 писал(а):ну здесь вам не судьба использовать два лейаута))) конечно же в таких делах нужно свой писать
вот хорошо что поняли) теперь есть толковый пример по написанию своего адаптера?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 45. Список-дерево ExpandableListView

Сообщение rezak90 » 03 янв 2013, 23:29

да в гугле полно примеров "android custom expandablelistview" (1 940 000 страниц)
R.id.team
Политика на форуме запрещена

denisneposeda
Сообщения: 19
Зарегистрирован: 30 дек 2012, 10:43

Re: Урок 45. Список-дерево ExpandableListView

Сообщение denisneposeda » 04 янв 2013, 00:27

rezak90 писал(а):да в гугле полно примеров "android custom expandablelistview" (1 940 000 страниц)
в моем случае достаточно переопеределить getChildView?
млин что-то я совсем не въехал...(
можно набросать примерчик по моему случаю?
у меня для 1 вида есть 4 атрибута, для 2 вида есть 6 атрибутов...и разные layouts...где мне отслеживать что 4 или 6 атрибутов, они ложатся в различные TextView...

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 45. Список-дерево ExpandableListView

Сообщение rezak90 » 04 янв 2013, 01:17

почему так сложно въехать в саму суть, всего два метода реализовать в которых строим главный айтем и дочерний, набросать пример это любой пример подойдёт просто вникните в то что такое адаптер, кратко: создайте класс в котором будут данные, создайте коллекцию в которой будет массив объектов этого класса, создайте адаптер в который следует передать эту коллекцию, переопределите по крайней мере 6 методов (по два метода на группу и ребёнка которые возвращают размер коллекции и объект по текущей позиции, и методы getChildView и getGroupView в которых инфлейтите нужный лейаут в зависимости от текущего айтема)... даже первый пример из гугла http://android-adda.blogspot.com/2011/0 ... tview.html чем не пример?
R.id.team
Политика на форуме запрещена

denisneposeda
Сообщения: 19
Зарегистрирован: 30 дек 2012, 10:43

Re: Урок 45. Список-дерево ExpandableListView

Сообщение denisneposeda » 04 янв 2013, 04:14

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

А, еще, где можно подглядеть код SimpleExpandableListAdapter? Т.е. хотелось бы посмотреть содержимое его методов? Этот вопрос решился....нашел исходники класса...

Я своему адаптеру передаю:

Код: Выделить всё

String[] groupFrom = {ATTRIBUTE_NAME_TEXT, ATTRIBUTE_NAME_CLOCK}; 
Как мне в адаптере работать с этими значениями? Вывел, вот такое

Код: Выделить всё

mygroupData.get(groupPosition).get(mygroupFrom[0]).toString(), где private ArrayList<Map<String, Object>> mygroupData;
, но возможно как то напрямую обращаться через имя? Добавляется:

Код: Выделить всё

 m.put(ATTRIBUTE_NAME_TEXT, text_s);
m.put(ATTRIBUTE_NAME_CLOCK, groups_clock[i]+"мин");
В исходнике тоже идет через элемент массива...а напрямую получается никак? :oops:

Ответить