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

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 21 окт 2018, 17:29

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




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

Зарегистрирован: 27 сен 2013, 23:28
Сообщений: 41
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Foenix писал(а):
вы хотите, чтоб я за вас почитала всю ветку?

Нет. Я название неправильно прочитал или вы не правильно написали (кастомный иерархический вью)

_________________
Изображение


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

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
это такой вью, только не стандартный, просто кто-то пишет свою библиотеку, которую можно использовать. Эту библиотеку подключаешь в свой проект (по ссылкам есть инструкция как это сделать). Такие компоненты обычно хорошо настраиваются. Например, тот, который использовала я - можно менять внешний вид, цвета, добавлять чекбоксы и картинки, а так же делать не два уровня иерархии, а сколько угодно.
Поищите в гугле "polidea treeview"

_________________
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
СообщениеДобавлено: 17 ноя 2013, 18:22 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
Кстати, и обычный ExpandableListView можно кастомизировать, вроде бы с картинками. Вот за полсекунды нагуглилось
http://imobiledevelopment.blogspot.ru/2 ... droid.html
http://learnandroideasily.blogspot.ru/2 ... ample.html

_________________
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
СообщениеДобавлено: 17 ноя 2013, 18:33 
Аватар пользователя

Зарегистрирован: 27 сен 2013, 23:28
Сообщений: 41
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Foenix писал(а):
Кстати, и обычный ExpandableListView можно кастомизировать, вроде бы с картинками. Вот за полсекунды нагуглилось
http://imobiledevelopment.blogspot.ru/2 ... droid.html
http://learnandroideasily.blogspot.ru/2 ... ample.html

Огромное спасибо :D

_________________
Изображение


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

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
Пожалуйста :)

_________________
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
СообщениеДобавлено: 16 фев 2014, 17:43 

Зарегистрирован: 02 ноя 2013, 22:43
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Наверное нубский вопрос.
Код:

String[] item;
...
item = getResources().getStringArray(R.array.itemName);

Как объяснить Эклипсу, что itemName - это не имя массива, а имя переменной?
В этом месте кода в зависимости от действий юзера должны загружаться разные массивы, с разными именами, с разным количеством строк.
И массивов этих 1500 штук.
Не хочется говнокода.
Заранее спасибо.


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

Зарегистрирован: 30 мар 2013, 22:52
Сообщений: 223
Благодарил (а): 14 раз.
Поблагодарили: 11 раз.
А массивы эти изменяются? Или они всегда одинаковые?
Если изменяются - почему не базу данных использовать? Даже если они неизменны - почему бд не использовать?

Попробуйте getIdentifer попробовать. У меня в первых опытах было подобное решение - обращение к кнопочкам по названию в переменной.

Примерная структура бд для древовидного списка- две таблицы, в одной заголовки и id, во второй id, Id_za(id загаловка из таблицы заголовков), и текст.

_________________
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.


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

Зарегистрирован: 18 ноя 2013, 17:53
Сообщений: 122
Благодарил (а): 11 раз.
Поблагодарили: 1 раз.
А как сделать так, что бы когда ExpandableList раскрывается экран находился в начале подгруппы а не перебрасывал на середину?


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

Зарегистрирован: 24 мар 2014, 14:56
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здравствуйте!
Сделал список, все работает как надо. Хотел добавить разные изображения для групп.
адаптер BaseExpandableListAdapter. Списки формирую примерно по уроку
Ветку читал и перечитывал, в гугле копался все равно ничего.
Как это можно сделать?
Спасибо


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

Зарегистрирован: 17 апр 2014, 17:50
Сообщений: 30
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Всем привет. На основе урока сделал свой ExpandableListAdapter и пытаюсь динамически добавлять в него иконки. Для этого в разметке группы создал пустой LinearLayout и в адаптере при заполнении группы списка вставляю в него иконки т.е. ImageView. Проблема в том, что иконки добавляются, но больше чем нужно. При первом запуске списка их больше в три раза, и потом при каждом закрытии или раскрытии группы они тоже добавляются. Никак не пойму в чём дело.
Для того, чтобы код был понятнее расскажу в чём суть. Список отображает расписание маршрута. Маршрут всегда один (в смысле количества, а не один и тот же), значит и группа списка тоже одна, а дети группы это подробное описание маршрута. Каждый "деть" соответствует пересадке с линии на линию. Группа списка содержит, помимо времени отправки и прибытия, информацию а линиях маршрута в текстовой форме и в виде иконок. Т.е. автобус, метро и т.д. Иконки я добавляю на основе информации из джейсонОтвета. После его парсинга, я получаю HashMap для группы списка, которая содержит ключи с названием vehicle_type0, vehicle_type1, vehicle_type2 и т.д. в зависимости от того, сколько типов транспорта имеет маршрут. А значения ключей, к примеру subway, train и т.д. то есть всё то, что даёт нам ответ от Google Directions API. И потом при построении списка в методе адаптера getGroupView() я динамически добавляю столько иконок, сколько ключей с началом vehicle_type в названии содержит HashMap. Но вот, как я уже писал выше, количество иконок изначально больше и при каждом клике по группе списка тоже увеличивается. Видимо я их как-то не правильно добавляю в разметку группы списка. Привожу код всего адаптера, проблема в самом низу кода, в методе getGroupView() в цикле for().
Код: [ Загрузить ] [ Скрыть ]
  1. import java.util.ArrayList; 
  2. import java.util.HashMap; 
  3. import java.util.Map; 
  4.  
  5. import android.app.Activity; 
  6. import android.content.Context; 
  7. import android.content.Intent; 
  8. import android.os.Bundle; 
  9. import android.view.LayoutInflater; 
  10. import android.view.View; 
  11. import android.view.ViewGroup; 
  12. import android.widget.BaseExpandableListAdapter; 
  13. import android.widget.ExpandableListView; 
  14. import android.widget.ImageView; 
  15. import android.widget.LinearLayout; 
  16. import android.widget.TextView; 
  17.  
  18. public class NaviTravelInfoAdapter extends Activity { 
  19.    
  20.   // коллекция для групп 
  21.   ArrayList<Map<String,Object>> groupData; 
  22.    
  23.   // общая коллекция для коллекций элементов 
  24.   ArrayList<ArrayList<Map<String,Object>>> childData; 
  25.  
  26.   ExpandableListView elvMain; 
  27.    
  28.   int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT; 
  29.    
  30.     /** Called when the activity is first created. */ 
  31.     public void onCreate(Bundle savedInstanceState) { 
  32.         super.onCreate(savedInstanceState); 
  33.         setContentView(R.layout.navi_travel_info_adapter); 
  34.          
  35.         Intent intent = getIntent(); 
  36.         String httpResponse = intent.getStringExtra("httpResponse"); 
  37.         NaviJsonParser njp = new NaviJsonParser(httpResponse); 
  38.         // заполняем коллекцию групп из массива с названиями групп 
  39.         groupData = njp.getTransitTravelInfo(); 
  40.          
  41.         // создаем коллекцию для коллекций элементов  
  42.         childData = njp.getTransitTravelStepsInfo();  
  43.  
  44.         ExpandableListAdapter adapter = new ExpandableListAdapter(this, groupData, childData); 
  45.         elvMain = (ExpandableListView) findViewById(R.id.elvTravelInfoList); 
  46.         elvMain.setAdapter(adapter); 
  47.     } 
  48.      
  49.     class ExpandableListAdapter extends BaseExpandableListAdapter { 
  50.  
  51.         @Override 
  52.         public boolean areAllItemsEnabled() 
  53.         { 
  54.             return true; 
  55.         } 
  56.  
  57.         private Context context; 
  58.  
  59.         private ArrayList<Map<String,Object>> groups; 
  60.  
  61.         private ArrayList<ArrayList<Map<String,Object>>> children; 
  62.  
  63.         public ExpandableListAdapter(Context context, ArrayList<Map<String,Object>> groups, 
  64.                 ArrayList<ArrayList<Map<String,Object>>> children) { 
  65.             this.context = context; 
  66.             this.groups = groups; 
  67.             this.children = children; 
  68.         } 
  69.  
  70.         @Override 
  71.         public Object getChild(int groupPosition, int childPosition) { 
  72.             return children.get(groupPosition).get(childPosition); 
  73.         } 
  74.  
  75.         @Override 
  76.         public long getChildId(int groupPosition, int childPosition) { 
  77.             return childPosition; 
  78.         } 
  79.          
  80.         // Return a child view. You can load your custom layout here. 
  81.         @Override 
  82.         public View getChildView(int groupPosition, int childPosition, boolean isLastChild, 
  83.                 View convertView, ViewGroup parent) { 
  84.             Map mapItm = (HashMap) getChild(groupPosition, childPosition); 
  85.             if (convertView == null) { 
  86.                 LayoutInflater infalInflater = (LayoutInflater) context 
  87.                         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  88.                 convertView = infalInflater.inflate(R.layout.navi_travel_info_item, null); 
  89.             } 
  90.             TextView depTime = (TextView) convertView.findViewById(R.id.tvNTIi_deptime); 
  91.             depTime.setText((CharSequence) mapItm.get("departure_time")); 
  92.  
  93.             TextView arrTime = (TextView) convertView.findViewById(R.id.tvNTIi_arrtime); 
  94.             arrTime.setText((CharSequence) mapItm.get("arrival_time")); 
  95.  
  96.             TextView depStop = (TextView) convertView.findViewById(R.id.tvNTIi_DepStop); 
  97.             depStop.setText((CharSequence) mapItm.get("departure_stop")); 
  98.  
  99.             TextView arrStop = (TextView) convertView.findViewById(R.id.tvNTIi_ArrStop); 
  100.             arrStop.setText((CharSequence) mapItm.get("arrival_stop")); 
  101.  
  102.             ImageView imgDir = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgDirection); 
  103.             imgDir.setImageResource(R.drawable.list_icon_ka_40); 
  104.  
  105.             ImageView imgDep = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgDep); 
  106.             imgDep.setImageResource(R.drawable.list_icon_ka_40); 
  107.              
  108.             ImageView imgArr = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgArr); 
  109.             imgArr.setImageResource(R.drawable.list_icon_ka_40); 
  110.  
  111.             ImageView imgWrngs = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgWarnings); 
  112.             imgWrngs.setImageResource(R.drawable.list_icon_ka_40); 
  113.              
  114.             return convertView; 
  115.         } 
  116.  
  117.         @Override 
  118.         public int getChildrenCount(int groupPosition) { 
  119.             return children.get(groupPosition).size(); 
  120.         } 
  121.  
  122.         @Override 
  123.         public Object getGroup(int groupPosition) { 
  124.             return groups.get(groupPosition); 
  125.         } 
  126.  
  127.         @Override 
  128.         public int getGroupCount() { 
  129.             return groups.size(); 
  130.         } 
  131.  
  132.         @Override 
  133.         public long getGroupId(int groupPosition) { 
  134.             return groupPosition; 
  135.         } 
  136.  
  137.         // Return a group view. You can load your custom layout here. 
  138.         @Override 
  139.         public View getGroupView(int groupPosition, boolean isExpanded, View convertView, 
  140.                 ViewGroup parent) { 
  141.             Map mapGrp = (HashMap) getGroup(groupPosition); 
  142.             if (convertView == null) { 
  143.                 LayoutInflater infalInflater = (LayoutInflater) context 
  144.                         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  145.                 convertView = infalInflater.inflate(R.layout.navi_travel_info_group, null); 
  146.             } 
  147.             TextView depTime = (TextView) convertView.findViewById(R.id.tvNTIg_deptime); 
  148.             depTime.setText((CharSequence) mapGrp.get("departure_time")); 
  149.  
  150.             TextView arrTime = (TextView) convertView.findViewById(R.id.tvNTIg_arrtime); 
  151.             arrTime.setText((CharSequence) mapGrp.get("arrival_time")); 
  152.  
  153.             TextView trvlLines = (TextView) convertView.findViewById(R.id.tvNTIg_lines); 
  154.             trvlLines.setText((CharSequence) mapGrp.get("travel_lines")); 
  155.          
  156.             LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams( 
  157.                     wrapContent, wrapContent); 
  158.             lParams.setMargins(5, 5, 0, 0); 
  159.  
  160.             LinearLayout imgsGroup = (LinearLayout) ((ViewGroup) convertView).findViewById(R.id.imgNTIg_ImgsGroup); 
  161.              
  162.              
  163.             for (Object actKey : mapGrp.keySet()) { 
  164.                 if (((String) actKey).startsWith("vehicle_type")) { 
  165.                     ImageView imgV = new ImageView(NaviTravelInfoAdapter.this); 
  166.                     imgV.setImageResource((int) mapGrp.get(actKey)); 
  167.                     imgsGroup.addView(imgV, lParams); 
  168.                 } 
  169.             } 
  170.              
  171.             return convertView; 
  172.         } 
  173.  
  174.         @Override 
  175.         public boolean hasStableIds() { 
  176.             return true; 
  177.         } 
  178.  
  179.         @Override 
  180.         public boolean isChildSelectable(int arg0, int arg1) { 
  181.             return true; 
  182.         } 
  183.  
  184.     } 


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

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
Нужно учитывать тот факт, что в списках View переиспользуется.
Очищайте imgsGroup перед его повторным заполнением: imgsGroup.removeAllViews()

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


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

Зарегистрирован: 17 апр 2014, 17:50
Сообщений: 30
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Снова здравствуйте. Продолжаю работать с ExpandableListAdapter. Ситуация следующая. Как и прежде он должен показывать описание маршрута со всеми пересадками, где группа списка это маршрут, а подгруппы (child) - пересадки. До сих пор я использовал пересадки с транспорта на транспорт и всё работало, но теперь хотел добавить и пешие пересадки, т.е. когда до той или иной остановки ещё дойти нужно, чтобы продолжить поездку на транспорте. Т.о. получаем полноценную информацию о маршруте. В коде типы пересадок имеют обозначение "WALKING" и "TRANSIT", для пешей и транспортной пересадок соответственно. В код добавил всего ничего, просто ещё одно условие "если то". В итоге получаю список с пустыми полями child, хотя количество этих child соответствует нужному.
Кажется дело в механизме заполнения "детей" адаптером, но я никак не пойму в чём дело.
На всякий случай снова весь адаптер, но проблема, как я понимаю, только в методе getChildView().
Код: [ Загрузить ] [ Скрыть ]
  1. public class NaviTravelInfoAdapter extends Activity { 
  2.    
  3.  
  4.   ArrayList<Map<String,Object>> groupData; 
  5.  
  6.   ArrayList<ArrayList<Map<String,Object>>> childData; 
  7.  
  8.   ExpandableListView elvMain; 
  9.   int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT; 
  10.     /** Called when the activity is first created. */ 
  11.     public void onCreate(Bundle savedInstanceState) { 
  12.         super.onCreate(savedInstanceState); 
  13.         setContentView(R.layout.navi_travel_info_adapter); 
  14.          
  15.         Intent intent = getIntent(); 
  16.         String httpResponse = intent.getStringExtra("httpResponse"); 
  17.         NaviJsonParser njp = new NaviJsonParser(httpResponse); 
  18.  
  19.         groupData = njp.getTransitTravelInfo(); 
  20.  
  21.         childData = njp.getTransitTravelStepsInfo();  
  22.  
  23.         ExpandableListAdapter adapter = new ExpandableListAdapter(this, groupData, childData); 
  24.         elvMain = (ExpandableListView) findViewById(R.id.elvTravelInfoList); 
  25.         elvMain.setAdapter(adapter); 
  26.     } 
  27.      
  28.     class ExpandableListAdapter extends BaseExpandableListAdapter { 
  29.         @Override 
  30.         public boolean areAllItemsEnabled() 
  31.         { 
  32.             return true; 
  33.         } 
  34.         private Context context; 
  35.         private ArrayList<Map<String,Object>> groups; 
  36.         private ArrayList<ArrayList<Map<String,Object>>> children; 
  37.  
  38.         public ExpandableListAdapter(Context context, ArrayList<Map<String,Object>> groups, 
  39.                 ArrayList<ArrayList<Map<String,Object>>> children) { 
  40.             this.context = context; 
  41.             this.groups = groups; 
  42.             this.children = children; 
  43.         } 
  44.         @Override 
  45.         public Object getChild(int groupPosition, int childPosition) { 
  46.             return children.get(groupPosition).get(childPosition); 
  47.         } 
  48.         @Override 
  49.         public long getChildId(int groupPosition, int childPosition) { 
  50.             return childPosition; 
  51.         } 
  52.         @Override 
  53.         public View getChildView(int groupPosition, int childPosition, boolean isLastChild, 
  54.                 View convertView, ViewGroup parent) { 
  55.             Map mapItm = (HashMap) getChild(groupPosition, childPosition); 
  56.             String tm = (String) mapItm.get("travel_mode"); 
  57.             if (convertView == null) { 
  58.                 LayoutInflater infalInflater = (LayoutInflater) context 
  59.                         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  60. //                if(tm == "WALKING") 
  61. //                    convertView = infalInflater.inflate(R.layout.navi_travel_info_item_walking, null); 
  62. //                else if(tm == "TRANSIT") 
  63.                     convertView = infalInflater.inflate(R.layout.navi_travel_info_item_transit, null); 
  64.             } 
  65.  
  66.             if(tm == "WALKING") { 
  67.                 TextView travel_mode = (TextView) convertView.findViewById(R.id.tvNTIi_linename); 
  68.                 travel_mode.setText((CharSequence) mapItm.get("html_instructions")); 
  69.             } 
  70.             else if(tm == "TRANSIT") { 
  71.                 TextView depTime = (TextView) convertView.findViewById(R.id.tvNTIi_deptime); 
  72.                 depTime.setText((CharSequence) mapItm.get("departure_time")); 
  73.      
  74.                 TextView arrTime = (TextView) convertView.findViewById(R.id.tvNTIi_arrtime); 
  75.                 arrTime.setText((CharSequence) mapItm.get("arrival_time")); 
  76.      
  77.                 TextView depStop = (TextView) convertView.findViewById(R.id.tvNTIi_DepStop); 
  78.                 depStop.setText((CharSequence) mapItm.get("departure_stop")); 
  79.      
  80.                 TextView arrStop = (TextView) convertView.findViewById(R.id.tvNTIi_ArrStop); 
  81.                 arrStop.setText((CharSequence) mapItm.get("arrival_stop")); 
  82.      
  83.                 TextView trvlDir = (TextView) convertView.findViewById(R.id.tvNTIi_direction); 
  84.                 trvlDir.setText((CharSequence) mapItm.get("headsign")); 
  85.      
  86.                 TextView lineName = (TextView) convertView.findViewById(R.id.tvNTIi_linename); 
  87.                 lineName.setText((CharSequence) mapItm.get("lineName")); 
  88.      
  89.                 ImageView imgDir = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgDirection); 
  90.                 imgDir.setImageResource(R.drawable.list_icon_richtung); 
  91.      
  92.                 ImageView imgDep = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgDep); 
  93.                 imgDep.setImageResource(R.drawable.list_icon_haltestelle); 
  94.                  
  95.                 ImageView imgArr = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgArr); 
  96.                 imgArr.setImageResource(R.drawable.list_icon_haltestelle); 
  97.      
  98.                 ImageView imgWrngs = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgWarnings); 
  99.                 imgWrngs.setImageResource(R.drawable.list_icon_warnings); 
  100. //            } 
  101.             return convertView; 
  102.         } 
  103.         @Override 
  104.         public int getChildrenCount(int groupPosition) { 
  105.             return children.get(groupPosition).size(); 
  106.         } 
  107.         @Override 
  108.         public Object getGroup(int groupPosition) { 
  109.             return groups.get(groupPosition); 
  110.         } 
  111.         @Override 
  112.         public int getGroupCount() { 
  113.             return groups.size(); 
  114.         } 
  115.         @Override 
  116.         public long getGroupId(int groupPosition) { 
  117.             return groupPosition; 
  118.         } 
  119.         @Override 
  120.         public View getGroupView(int groupPosition, boolean isExpanded, View convertView, 
  121.                 ViewGroup parent) { 
  122.             Map mapGrp = (HashMap) getGroup(groupPosition); 
  123.             if (convertView == null) { 
  124.                 LayoutInflater infalInflater = (LayoutInflater) context 
  125.                         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  126.                 convertView = infalInflater.inflate(R.layout.navi_travel_info_group, null); 
  127.             } 
  128.             TextView depTime = (TextView) convertView.findViewById(R.id.tvNTIg_deptime); 
  129.             depTime.setText((CharSequence) mapGrp.get("departure_time")); 
  130.  
  131.             TextView arrTime = (TextView) convertView.findViewById(R.id.tvNTIg_arrtime); 
  132.             arrTime.setText((CharSequence) mapGrp.get("arrival_time")); 
  133.  
  134.             TextView trvlLines = (TextView) convertView.findViewById(R.id.tvNTIg_lines); 
  135.             trvlLines.setText((CharSequence) mapGrp.get("travel_lines")); 
  136.          
  137.             LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams( 
  138.                     wrapContent, wrapContent); 
  139.             lParams.setMargins(5, 5, 0, 0); 
  140.  
  141.             LinearLayout imgsGroup = (LinearLayout) ((ViewGroup) convertView).findViewById(R.id.imgNTIg_ImgsGroup); 
  142.             imgsGroup.removeAllViews(); 
  143.  
  144.             for (Object actKey : mapGrp.keySet()) { 
  145.                 if (((String) actKey).startsWith("vehicle_type")) { 
  146.                     System.out.println("actKey = "+actKey); 
  147.                     ImageView imgV = new ImageView(NaviTravelInfoAdapter.this); 
  148.                     imgV.setImageResource((int) mapGrp.get(actKey)); 
  149.                     imgsGroup.addView(imgV, lParams); 
  150.                 } 
  151.             } 
  152.              
  153.             return convertView; 
  154.         } 
  155.         @Override 
  156.         public boolean hasStableIds() { 
  157.             return true; 
  158.         } 
  159.         @Override 
  160.         public boolean isChildSelectable(int arg0, int arg1) { 
  161.             return true; 
  162.         } 
  163.     } 

A тут метод, который предоставляет "детей" адаптеру.
Код: [ Загрузить ] [ Скрыть ]
  1.     public ArrayList<ArrayList<Map<String, Object>>> getTransitTravelStepsInfo() { 
  2.  
  3.         ArrayList<Map<String, Object>> stepInfo = new ArrayList<Map<String,Object>>(); 
  4.  
  5.         ArrayList<ArrayList<Map<String, Object>>> allSteps = new ArrayList<ArrayList<Map<String,Object>>>(); 
  6.  
  7.         Map<String, Object> transitStepInfo = null; 
  8.  
  9.         JSONArray steps = null; 
  10.  
  11.         try { 
  12.             steps = response.getJSONArray("routes").getJSONObject(0) 
  13.                     .getJSONArray("legs").getJSONObject(0) 
  14.                     .getJSONArray("steps"); 
  15.             for(int i = 0; i < steps.length(); i++) { 
  16.                 String travel_mode =  steps.getJSONObject(i).getString("travel_mode"); 
  17.                 if (travel_mode.equals("WALKING")) { 
  18.                     transitStepInfo = new HashMap<String, Object>(); 
  19.                     transitStepInfo.put("travel_mode", travel_mode); 
  20.                     String html_instructions =  steps.getJSONObject(i).getString("html_instructions"); 
  21.                     transitStepInfo.put("html_instructions", html_instructions); 
  22.                 } 
  23.                 else if (travel_mode.equals("DRIVING")) { 
  24.                     transitStepInfo = new HashMap<String, Object>(); 
  25.                     transitStepInfo.put("travel_mode", travel_mode); 
  26.                 } 
  27.                 else if (travel_mode.equals("TRANSIT")) { 
  28.                     transitStepInfo = new HashMap<String, Object>(); 
  29.                     transitStepInfo.put("travel_mode", travel_mode); 
  30.                     String arrival_time =  steps.getJSONObject(i).getJSONObject("transit_details").getJSONObject("arrival_time").getString("text"); 
  31.                     String departure_time =  steps.getJSONObject(i).getJSONObject("transit_details").getJSONObject("departure_time").getString("text"); 
  32.                     transitStepInfo.put("departure_time", departure_time); 
  33.                     transitStepInfo.put("arrival_time", arrival_time); 
  34.                     String departure_stop =  steps.getJSONObject(i).getJSONObject("transit_details").getJSONObject("departure_stop").getString("name"); 
  35.                     String arrival_stop =  steps.getJSONObject(i).getJSONObject("transit_details").getJSONObject("arrival_stop").getString("name"); 
  36.                     transitStepInfo.put("departure_stop", departure_stop); 
  37.                     transitStepInfo.put("arrival_stop", arrival_stop); 
  38.                     String headsign =  steps.getJSONObject(i).getJSONObject("transit_details").getString("headsign"); 
  39.                     transitStepInfo.put("headsign", headsign); 
  40.                     String lineName = steps.getJSONObject(i).getJSONObject("transit_details").getJSONObject("line").getString("short_name"); 
  41.                     transitStepInfo.put("lineName", lineName); 
  42.                 } 
  43.                 stepInfo.add(transitStepInfo); 
  44.             } 
  45.             allSteps.add(stepInfo); 
  46.  
  47.         } catch (JSONException e) { 
  48.             System.out.println("JASON_PARSER_<_getTransitTravelStepsInfo_>_ERROR"); 
  49.             e.printStackTrace(); 
  50.         } 
  51.         return allSteps; 
  52.     } 

Да, и ещё. Если пытаюсь, в зависимости от типа поездки, использовать свой layout-файл для childView,
Код: [ Загрузить ] [ Скрыть ]
  1.                 if(tm == "WALKING") 
  2.                     convertView = infalInflater.inflate(R.layout.navi_travel_info_item_walking, null); 
  3.                 else if(tm == "TRANSIT") 
  4.                         convertView = infalInflater.inflate(R.layout.navi_travel_info_item_transit, null); 

то получаю ошибки типа "measure height of children"
Такое вообще возможно сделать в этом адаптере?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 45. Список-дерево ExpandableListView
СообщениеДобавлено: 07 май 2014, 08:13 

Зарегистрирован: 17 апр 2014, 17:50
Сообщений: 30
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Уже разобрался. Проблема была в if (convertView == null ) {}. Я тоже убрал его, как уже писали выше, и всё заработало.


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

Зарегистрирован: 18 окт 2012, 11:17
Сообщений: 1098
Откуда: г. Красноярск
Благодарил (а): 26 раз.
Поблагодарили: 279 раз.
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. if(tm == "WALKING")

не надо так...


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

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
Sebler писал(а):
Уже разобрался. Проблема была в if (convertView == null ) {}. Я тоже убрал его, как уже писали выше, и всё заработало.

обратите внимание на ответ klblk

_________________
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
СообщениеДобавлено: 09 май 2014, 17:40 

Зарегистрирован: 17 апр 2014, 17:50
Сообщений: 30
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Всех с праздником!

klblk писал(а):
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. if(tm == "WALKING")

не надо так...

А как надо? Если вы имеете в виду, что надо было писать tm.equals("WALKING") , то я так и писал по всему коду, но почему-то такая запись иногда работает, а иногда нет. Конкретно в этой активити она не работала, а в моём парзере работает. Читал где-то, что имеет смысл переопределить метод equals(). Но пока оставил всё как есть, т.е. где-то с equals, а где-то без него. Как говориться в одном анекдоте:
- "Работает?"
- "Работает"
- "Не трогай, пусть работает"

Если же вы что-то другое имели в виду, то озвучьте пожалуйста :)


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

Зарегистрирован: 12 дек 2013, 21:25
Сообщений: 67
Благодарил (а): 8 раз.
Поблагодарили: 16 раз.
Sebler писал(а):
Всех с праздником!

klblk писал(а):
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. if(tm == "WALKING")

не надо так...

А как надо? Если вы имеете в виду, что надо было писать tm.equals("WALKING") , то я так и писал по всему коду, н......

Если же вы что-то другое имели в виду, то озвучьте пожалуйста :)


Если не переопределял equals() то вызывается Object.equals() а там
Код: [ Загрузить ] [ Скрыть ]
  1. public boolean equals(Object o) { 
  2.         return this == o; 
  3.     } 

if(tm == "WALKING") лучше конечно заменить и исключить NullPointerException на

Код: [ Загрузить ] [ Скрыть ]
  1. if ("WALKING".equals(tm)) { 
  2. //do something 

_________________
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма


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

Зарегистрирован: 17 апр 2014, 17:50
Сообщений: 30
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Leeroy писал(а):
if(tm == "WALKING") лучше конечно заменить и исключить NullPointerException на
Код: [ Загрузить ] [ Скрыть ]
  1. if ("WALKING".equals(tm)) { 
  2. //do something 

Т.е. по сути нужно писать не tm.equals("WALKING"), а "WALKING".equals(tm)? Я правильно понял?
А в методе иквалс вместо this подставляется то, что стоит перед иквалс? Т.е. если я пишу variable.equals("constant"), то вместо this имеем variable. Так?


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

Зарегистрирован: 12 дек 2013, 21:25
Сообщений: 67
Благодарил (а): 8 раз.
Поблагодарили: 16 раз.
Sebler писал(а):
Leeroy писал(а):
if(tm == "WALKING") лучше конечно заменить и исключить NullPointerException на
Код: [ Загрузить ] [ Скрыть ]
  1. if ("WALKING".equals(tm)) { 
  2. //do something 

Т.е. по сути нужно писать не tm.equals("WALKING"), а "WALKING".equals(tm)? Я правильно понял?
А в методе иквалс вместо this подставляется то, что стоит перед иквалс? Т.е. если я пишу variable.equals("constant"), то вместо this имеем variable. Так?


да
вот тут можно глянуть http://skipy.ru/technics/objCompTh.html#eqeqvsequals

_________________
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма


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

Зарегистрирован: 17 апр 2014, 17:50
Сообщений: 30
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Всем привет. Уже спросил в соседней теме, но там вряд ли ответят. Вставляю в ExpandableListView свою картинку для индикатора раскрытия группы, но он растягивается по всей высоте groupView. Ширину можно настроить методом setIndicatorBounds(). Что я и делаю, и положение и ширина индикатора меня устраивают. Но вот что делать с высотой?


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

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


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

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