Нет. Я название неправильно прочитал или вы не правильно написали (кастомный иерархический вью)Foenix писал(а):вы хотите, чтоб я за вас почитала всю ветку?
Урок 45. Список-дерево ExpandableListView
Re: Урок 45. Список-дерево ExpandableListView
Re: Урок 45. Список-дерево ExpandableListView
это такой вью, только не стандартный, просто кто-то пишет свою библиотеку, которую можно использовать. Эту библиотеку подключаешь в свой проект (по ссылкам есть инструкция как это сделать). Такие компоненты обычно хорошо настраиваются. Например, тот, который использовала я - можно менять внешний вид, цвета, добавлять чекбоксы и картинки, а так же делать не два уровня иерархии, а сколько угодно.
Поищите в гугле "polidea treeview"
Поищите в гугле "polidea treeview"
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 45. Список-дерево ExpandableListView
Кстати, и обычный ExpandableListView можно кастомизировать, вроде бы с картинками. Вот за полсекунды нагуглилось
http://imobiledevelopment.blogspot.ru/2 ... droid.html
http://learnandroideasily.blogspot.ru/2 ... ample.html
http://imobiledevelopment.blogspot.ru/2 ... droid.html
http://learnandroideasily.blogspot.ru/2 ... ample.html
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 45. Список-дерево ExpandableListView
Огромное спасибоFoenix писал(а):Кстати, и обычный ExpandableListView можно кастомизировать, вроде бы с картинками. Вот за полсекунды нагуглилось
http://imobiledevelopment.blogspot.ru/2 ... droid.html
http://learnandroideasily.blogspot.ru/2 ... ample.html
Re: Урок 45. Список-дерево ExpandableListView
Пожалуйста
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 45. Список-дерево ExpandableListView
Наверное нубский вопрос.
Код:
String[] item;
...
item = getResources().getStringArray(R.array.itemName);
Как объяснить Эклипсу, что itemName - это не имя массива, а имя переменной?
В этом месте кода в зависимости от действий юзера должны загружаться разные массивы, с разными именами, с разным количеством строк.
И массивов этих 1500 штук.
Не хочется говнокода.
Заранее спасибо.
Код:
String[] item;
...
item = getResources().getStringArray(R.array.itemName);
Как объяснить Эклипсу, что itemName - это не имя массива, а имя переменной?
В этом месте кода в зависимости от действий юзера должны загружаться разные массивы, с разными именами, с разным количеством строк.
И массивов этих 1500 штук.
Не хочется говнокода.
Заранее спасибо.
Re: Урок 45. Список-дерево ExpandableListView
А массивы эти изменяются? Или они всегда одинаковые?
Если изменяются - почему не базу данных использовать? Даже если они неизменны - почему бд не использовать?
Попробуйте getIdentifer попробовать. У меня в первых опытах было подобное решение - обращение к кнопочкам по названию в переменной.
Примерная структура бд для древовидного списка- две таблицы, в одной заголовки и id, во второй id, Id_za(id загаловка из таблицы заголовков), и текст.
Если изменяются - почему не базу данных использовать? Даже если они неизменны - почему бд не использовать?
Попробуйте getIdentifer попробовать. У меня в первых опытах было подобное решение - обращение к кнопочкам по названию в переменной.
Примерная структура бд для древовидного списка- две таблицы, в одной заголовки и id, во второй id, Id_za(id загаловка из таблицы заголовков), и текст.
Мой первенец: MyMoney. Менеджер расходов
Бьем рекорды русских топов
Могу ответить на любые вопросы по маркетингу и развитию.
Бьем рекорды русских топов
Могу ответить на любые вопросы по маркетингу и развитию.
-
- Сообщения: 122
- Зарегистрирован: 18 ноя 2013, 17:53
Re: Урок 45. Список-дерево ExpandableListView
А как сделать так, что бы когда ExpandableList раскрывается экран находился в начале подгруппы а не перебрасывал на середину?
Re: Урок 45. Список-дерево ExpandableListView
Здравствуйте!
Сделал список, все работает как надо. Хотел добавить разные изображения для групп.
адаптер BaseExpandableListAdapter. Списки формирую примерно по уроку
Ветку читал и перечитывал, в гугле копался все равно ничего.
Как это можно сделать?
Спасибо
Сделал список, все работает как надо. Хотел добавить разные изображения для групп.
адаптер BaseExpandableListAdapter. Списки формирую примерно по уроку
Ветку читал и перечитывал, в гугле копался все равно ничего.
Как это можно сделать?
Спасибо
Re: Урок 45. Список-дерево ExpandableListView
Всем привет. На основе урока сделал свой ExpandableListAdapter и пытаюсь динамически добавлять в него иконки. Для этого в разметке группы создал пустой LinearLayout и в адаптере при заполнении группы списка вставляю в него иконки т.е. ImageView. Проблема в том, что иконки добавляются, но больше чем нужно. При первом запуске списка их больше в три раза, и потом при каждом закрытии или раскрытии группы они тоже добавляются. Никак не пойму в чём дело.
Для того, чтобы код был понятнее расскажу в чём суть. Список отображает расписание маршрута. Маршрут всегда один (в смысле количества, а не один и тот же), значит и группа списка тоже одна, а дети группы это подробное описание маршрута. Каждый "деть" соответствует пересадке с линии на линию. Группа списка содержит, помимо времени отправки и прибытия, информацию а линиях маршрута в текстовой форме и в виде иконок. Т.е. автобус, метро и т.д. Иконки я добавляю на основе информации из джейсонОтвета. После его парсинга, я получаю HashMap для группы списка, которая содержит ключи с названием vehicle_type0, vehicle_type1, vehicle_type2 и т.д. в зависимости от того, сколько типов транспорта имеет маршрут. А значения ключей, к примеру subway, train и т.д. то есть всё то, что даёт нам ответ от Google Directions API. И потом при построении списка в методе адаптера getGroupView() я динамически добавляю столько иконок, сколько ключей с началом vehicle_type в названии содержит HashMap. Но вот, как я уже писал выше, количество иконок изначально больше и при каждом клике по группе списка тоже увеличивается. Видимо я их как-то не правильно добавляю в разметку группы списка. Привожу код всего адаптера, проблема в самом низу кода, в методе getGroupView() в цикле for().
Для того, чтобы код был понятнее расскажу в чём суть. Список отображает расписание маршрута. Маршрут всегда один (в смысле количества, а не один и тот же), значит и группа списка тоже одна, а дети группы это подробное описание маршрута. Каждый "деть" соответствует пересадке с линии на линию. Группа списка содержит, помимо времени отправки и прибытия, информацию а линиях маршрута в текстовой форме и в виде иконок. Т.е. автобус, метро и т.д. Иконки я добавляю на основе информации из джейсонОтвета. После его парсинга, я получаю HashMap для группы списка, которая содержит ключи с названием vehicle_type0, vehicle_type1, vehicle_type2 и т.д. в зависимости от того, сколько типов транспорта имеет маршрут. А значения ключей, к примеру subway, train и т.д. то есть всё то, что даёт нам ответ от Google Directions API. И потом при построении списка в методе адаптера getGroupView() я динамически добавляю столько иконок, сколько ключей с началом vehicle_type в названии содержит HashMap. Но вот, как я уже писал выше, количество иконок изначально больше и при каждом клике по группе списка тоже увеличивается. Видимо я их как-то не правильно добавляю в разметку группы списка. Привожу код всего адаптера, проблема в самом низу кода, в методе getGroupView() в цикле for().
Код: Выделить всё
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class NaviTravelInfoAdapter extends Activity {
// коллекция для групп
ArrayList<Map<String,Object>> groupData;
// общая коллекция для коллекций элементов
ArrayList<ArrayList<Map<String,Object>>> childData;
ExpandableListView elvMain;
int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.navi_travel_info_adapter);
Intent intent = getIntent();
String httpResponse = intent.getStringExtra("httpResponse");
NaviJsonParser njp = new NaviJsonParser(httpResponse);
// заполняем коллекцию групп из массива с названиями групп
groupData = njp.getTransitTravelInfo();
// создаем коллекцию для коллекций элементов
childData = njp.getTransitTravelStepsInfo();
ExpandableListAdapter adapter = new ExpandableListAdapter(this, groupData, childData);
elvMain = (ExpandableListView) findViewById(R.id.elvTravelInfoList);
elvMain.setAdapter(adapter);
}
class ExpandableListAdapter extends BaseExpandableListAdapter {
@Override
public boolean areAllItemsEnabled()
{
return true;
}
private Context context;
private ArrayList<Map<String,Object>> groups;
private ArrayList<ArrayList<Map<String,Object>>> children;
public ExpandableListAdapter(Context context, ArrayList<Map<String,Object>> groups,
ArrayList<ArrayList<Map<String,Object>>> children) {
this.context = context;
this.groups = groups;
this.children = children;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return children.get(groupPosition).get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
// Return a child view. You can load your custom layout here.
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
Map mapItm = (HashMap) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.navi_travel_info_item, null);
}
TextView depTime = (TextView) convertView.findViewById(R.id.tvNTIi_deptime);
depTime.setText((CharSequence) mapItm.get("departure_time"));
TextView arrTime = (TextView) convertView.findViewById(R.id.tvNTIi_arrtime);
arrTime.setText((CharSequence) mapItm.get("arrival_time"));
TextView depStop = (TextView) convertView.findViewById(R.id.tvNTIi_DepStop);
depStop.setText((CharSequence) mapItm.get("departure_stop"));
TextView arrStop = (TextView) convertView.findViewById(R.id.tvNTIi_ArrStop);
arrStop.setText((CharSequence) mapItm.get("arrival_stop"));
ImageView imgDir = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgDirection);
imgDir.setImageResource(R.drawable.list_icon_ka_40);
ImageView imgDep = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgDep);
imgDep.setImageResource(R.drawable.list_icon_ka_40);
ImageView imgArr = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgArr);
imgArr.setImageResource(R.drawable.list_icon_ka_40);
ImageView imgWrngs = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgWarnings);
imgWrngs.setImageResource(R.drawable.list_icon_ka_40);
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return children.get(groupPosition).size();
}
@Override
public Object getGroup(int groupPosition) {
return groups.get(groupPosition);
}
@Override
public int getGroupCount() {
return groups.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
// Return a group view. You can load your custom layout here.
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
Map mapGrp = (HashMap) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.navi_travel_info_group, null);
}
TextView depTime = (TextView) convertView.findViewById(R.id.tvNTIg_deptime);
depTime.setText((CharSequence) mapGrp.get("departure_time"));
TextView arrTime = (TextView) convertView.findViewById(R.id.tvNTIg_arrtime);
arrTime.setText((CharSequence) mapGrp.get("arrival_time"));
TextView trvlLines = (TextView) convertView.findViewById(R.id.tvNTIg_lines);
trvlLines.setText((CharSequence) mapGrp.get("travel_lines"));
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
wrapContent, wrapContent);
lParams.setMargins(5, 5, 0, 0);
LinearLayout imgsGroup = (LinearLayout) ((ViewGroup) convertView).findViewById(R.id.imgNTIg_ImgsGroup);
for (Object actKey : mapGrp.keySet()) {
if (((String) actKey).startsWith("vehicle_type")) {
ImageView imgV = new ImageView(NaviTravelInfoAdapter.this);
imgV.setImageResource((int) mapGrp.get(actKey));
imgsGroup.addView(imgV, lParams);
}
}
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int arg0, int arg1) {
return true;
}
}
}
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 45. Список-дерево ExpandableListView
Нужно учитывать тот факт, что в списках View переиспользуется.
Очищайте imgsGroup перед его повторным заполнением: imgsGroup.removeAllViews()
Очищайте imgsGroup перед его повторным заполнением: imgsGroup.removeAllViews()
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 45. Список-дерево ExpandableListView
Снова здравствуйте. Продолжаю работать с ExpandableListAdapter. Ситуация следующая. Как и прежде он должен показывать описание маршрута со всеми пересадками, где группа списка это маршрут, а подгруппы (child) - пересадки. До сих пор я использовал пересадки с транспорта на транспорт и всё работало, но теперь хотел добавить и пешие пересадки, т.е. когда до той или иной остановки ещё дойти нужно, чтобы продолжить поездку на транспорте. Т.о. получаем полноценную информацию о маршруте. В коде типы пересадок имеют обозначение "WALKING" и "TRANSIT", для пешей и транспортной пересадок соответственно. В код добавил всего ничего, просто ещё одно условие "если то". В итоге получаю список с пустыми полями child, хотя количество этих child соответствует нужному.
Кажется дело в механизме заполнения "детей" адаптером, но я никак не пойму в чём дело.
На всякий случай снова весь адаптер, но проблема, как я понимаю, только в методе getChildView().
A тут метод, который предоставляет "детей" адаптеру.
Да, и ещё. Если пытаюсь, в зависимости от типа поездки, использовать свой layout-файл для childView,
то получаю ошибки типа "measure height of children"
Такое вообще возможно сделать в этом адаптере?
Кажется дело в механизме заполнения "детей" адаптером, но я никак не пойму в чём дело.
На всякий случай снова весь адаптер, но проблема, как я понимаю, только в методе getChildView().
Код: Выделить всё
public class NaviTravelInfoAdapter extends Activity {
ArrayList<Map<String,Object>> groupData;
ArrayList<ArrayList<Map<String,Object>>> childData;
ExpandableListView elvMain;
int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.navi_travel_info_adapter);
Intent intent = getIntent();
String httpResponse = intent.getStringExtra("httpResponse");
NaviJsonParser njp = new NaviJsonParser(httpResponse);
groupData = njp.getTransitTravelInfo();
childData = njp.getTransitTravelStepsInfo();
ExpandableListAdapter adapter = new ExpandableListAdapter(this, groupData, childData);
elvMain = (ExpandableListView) findViewById(R.id.elvTravelInfoList);
elvMain.setAdapter(adapter);
}
class ExpandableListAdapter extends BaseExpandableListAdapter {
@Override
public boolean areAllItemsEnabled()
{
return true;
}
private Context context;
private ArrayList<Map<String,Object>> groups;
private ArrayList<ArrayList<Map<String,Object>>> children;
public ExpandableListAdapter(Context context, ArrayList<Map<String,Object>> groups,
ArrayList<ArrayList<Map<String,Object>>> children) {
this.context = context;
this.groups = groups;
this.children = children;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return children.get(groupPosition).get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
Map mapItm = (HashMap) getChild(groupPosition, childPosition);
String tm = (String) mapItm.get("travel_mode");
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// if(tm == "WALKING")
// convertView = infalInflater.inflate(R.layout.navi_travel_info_item_walking, null);
// else if(tm == "TRANSIT")
convertView = infalInflater.inflate(R.layout.navi_travel_info_item_transit, null);
}
if(tm == "WALKING") {
TextView travel_mode = (TextView) convertView.findViewById(R.id.tvNTIi_linename);
travel_mode.setText((CharSequence) mapItm.get("html_instructions"));
}
else if(tm == "TRANSIT") {
TextView depTime = (TextView) convertView.findViewById(R.id.tvNTIi_deptime);
depTime.setText((CharSequence) mapItm.get("departure_time"));
TextView arrTime = (TextView) convertView.findViewById(R.id.tvNTIi_arrtime);
arrTime.setText((CharSequence) mapItm.get("arrival_time"));
TextView depStop = (TextView) convertView.findViewById(R.id.tvNTIi_DepStop);
depStop.setText((CharSequence) mapItm.get("departure_stop"));
TextView arrStop = (TextView) convertView.findViewById(R.id.tvNTIi_ArrStop);
arrStop.setText((CharSequence) mapItm.get("arrival_stop"));
TextView trvlDir = (TextView) convertView.findViewById(R.id.tvNTIi_direction);
trvlDir.setText((CharSequence) mapItm.get("headsign"));
TextView lineName = (TextView) convertView.findViewById(R.id.tvNTIi_linename);
lineName.setText((CharSequence) mapItm.get("lineName"));
ImageView imgDir = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgDirection);
imgDir.setImageResource(R.drawable.list_icon_richtung);
ImageView imgDep = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgDep);
imgDep.setImageResource(R.drawable.list_icon_haltestelle);
ImageView imgArr = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgArr);
imgArr.setImageResource(R.drawable.list_icon_haltestelle);
ImageView imgWrngs = (ImageView) convertView.findViewById(R.id.ivNTIi_ImgWarnings);
imgWrngs.setImageResource(R.drawable.list_icon_warnings);
// }
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return children.get(groupPosition).size();
}
@Override
public Object getGroup(int groupPosition) {
return groups.get(groupPosition);
}
@Override
public int getGroupCount() {
return groups.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
Map mapGrp = (HashMap) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.navi_travel_info_group, null);
}
TextView depTime = (TextView) convertView.findViewById(R.id.tvNTIg_deptime);
depTime.setText((CharSequence) mapGrp.get("departure_time"));
TextView arrTime = (TextView) convertView.findViewById(R.id.tvNTIg_arrtime);
arrTime.setText((CharSequence) mapGrp.get("arrival_time"));
TextView trvlLines = (TextView) convertView.findViewById(R.id.tvNTIg_lines);
trvlLines.setText((CharSequence) mapGrp.get("travel_lines"));
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
wrapContent, wrapContent);
lParams.setMargins(5, 5, 0, 0);
LinearLayout imgsGroup = (LinearLayout) ((ViewGroup) convertView).findViewById(R.id.imgNTIg_ImgsGroup);
imgsGroup.removeAllViews();
for (Object actKey : mapGrp.keySet()) {
if (((String) actKey).startsWith("vehicle_type")) {
System.out.println("actKey = "+actKey);
ImageView imgV = new ImageView(NaviTravelInfoAdapter.this);
imgV.setImageResource((int) mapGrp.get(actKey));
imgsGroup.addView(imgV, lParams);
}
}
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int arg0, int arg1) {
return true;
}
}
}
Код: Выделить всё
public ArrayList<ArrayList<Map<String, Object>>> getTransitTravelStepsInfo() {
ArrayList<Map<String, Object>> stepInfo = new ArrayList<Map<String,Object>>();
ArrayList<ArrayList<Map<String, Object>>> allSteps = new ArrayList<ArrayList<Map<String,Object>>>();
Map<String, Object> transitStepInfo = null;
JSONArray steps = null;
try {
steps = response.getJSONArray("routes").getJSONObject(0)
.getJSONArray("legs").getJSONObject(0)
.getJSONArray("steps");
for(int i = 0; i < steps.length(); i++) {
String travel_mode = steps.getJSONObject(i).getString("travel_mode");
if (travel_mode.equals("WALKING")) {
transitStepInfo = new HashMap<String, Object>();
transitStepInfo.put("travel_mode", travel_mode);
String html_instructions = steps.getJSONObject(i).getString("html_instructions");
transitStepInfo.put("html_instructions", html_instructions);
}
else if (travel_mode.equals("DRIVING")) {
transitStepInfo = new HashMap<String, Object>();
transitStepInfo.put("travel_mode", travel_mode);
}
else if (travel_mode.equals("TRANSIT")) {
transitStepInfo = new HashMap<String, Object>();
transitStepInfo.put("travel_mode", travel_mode);
String arrival_time = steps.getJSONObject(i).getJSONObject("transit_details").getJSONObject("arrival_time").getString("text");
String departure_time = steps.getJSONObject(i).getJSONObject("transit_details").getJSONObject("departure_time").getString("text");
transitStepInfo.put("departure_time", departure_time);
transitStepInfo.put("arrival_time", arrival_time);
String departure_stop = steps.getJSONObject(i).getJSONObject("transit_details").getJSONObject("departure_stop").getString("name");
String arrival_stop = steps.getJSONObject(i).getJSONObject("transit_details").getJSONObject("arrival_stop").getString("name");
transitStepInfo.put("departure_stop", departure_stop);
transitStepInfo.put("arrival_stop", arrival_stop);
String headsign = steps.getJSONObject(i).getJSONObject("transit_details").getString("headsign");
transitStepInfo.put("headsign", headsign);
String lineName = steps.getJSONObject(i).getJSONObject("transit_details").getJSONObject("line").getString("short_name");
transitStepInfo.put("lineName", lineName);
}
stepInfo.add(transitStepInfo);
}
allSteps.add(stepInfo);
} catch (JSONException e) {
System.out.println("JASON_PARSER_<_getTransitTravelStepsInfo_>_ERROR");
e.printStackTrace();
}
return allSteps;
}
Код: Выделить всё
if(tm == "WALKING")
convertView = infalInflater.inflate(R.layout.navi_travel_info_item_walking, null);
else if(tm == "TRANSIT")
convertView = infalInflater.inflate(R.layout.navi_travel_info_item_transit, null);
Такое вообще возможно сделать в этом адаптере?
Re: Урок 45. Список-дерево ExpandableListView
Уже разобрался. Проблема была в if (convertView == null ) {}. Я тоже убрал его, как уже писали выше, и всё заработало.
Re: Урок 45. Список-дерево ExpandableListView
[syntax=java]if(tm == "WALKING")[/syntax]
не надо так...
не надо так...
Re: Урок 45. Список-дерево ExpandableListView
обратите внимание на ответ klblkSebler писал(а):Уже разобрался. Проблема была в if (convertView == null ) {}. Я тоже убрал его, как уже писали выше, и всё заработало.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 45. Список-дерево ExpandableListView
Всех с праздником!
- "Работает?"
- "Работает"
- "Не трогай, пусть работает"
Если же вы что-то другое имели в виду, то озвучьте пожалуйста
А как надо? Если вы имеете в виду, что надо было писать tm.equals("WALKING") , то я так и писал по всему коду, но почему-то такая запись иногда работает, а иногда нет. Конкретно в этой активити она не работала, а в моём парзере работает. Читал где-то, что имеет смысл переопределить метод equals(). Но пока оставил всё как есть, т.е. где-то с equals, а где-то без него. Как говориться в одном анекдоте:klblk писал(а):[syntax=java]if(tm == "WALKING")[/syntax]
не надо так...
- "Работает?"
- "Работает"
- "Не трогай, пусть работает"
Если же вы что-то другое имели в виду, то озвучьте пожалуйста
Re: Урок 45. Список-дерево ExpandableListView
Если не переопределял equals() то вызывается Object.equals() а тамSebler писал(а):Всех с праздником!
А как надо? Если вы имеете в виду, что надо было писать tm.equals("WALKING") , то я так и писал по всему коду, н......klblk писал(а):[syntax=java]if(tm == "WALKING")[/syntax]
не надо так...
Если же вы что-то другое имели в виду, то озвучьте пожалуйста
Код: Выделить всё
public boolean equals(Object o) {
return this == o;
}
Код: Выделить всё
if ("WALKING".equals(tm)) {
//do something
}
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма
Телепрограмма в твоем смарте Телепрограмма
Re: Урок 45. Список-дерево ExpandableListView
Т.е. по сути нужно писать не tm.equals("WALKING"), а "WALKING".equals(tm)? Я правильно понял?Leeroy писал(а): if(tm == "WALKING") лучше конечно заменить и исключить NullPointerException наКод: Выделить всё
if ("WALKING".equals(tm)) { //do something }
А в методе иквалс вместо this подставляется то, что стоит перед иквалс? Т.е. если я пишу variable.equals("constant"), то вместо this имеем variable. Так?
Re: Урок 45. Список-дерево ExpandableListView
даSebler писал(а):Т.е. по сути нужно писать не tm.equals("WALKING"), а "WALKING".equals(tm)? Я правильно понял?Leeroy писал(а): if(tm == "WALKING") лучше конечно заменить и исключить NullPointerException наКод: Выделить всё
if ("WALKING".equals(tm)) { //do something }
А в методе иквалс вместо this подставляется то, что стоит перед иквалс? Т.е. если я пишу variable.equals("constant"), то вместо this имеем variable. Так?
вот тут можно глянуть http://skipy.ru/technics/objCompTh.html#eqeqvsequals
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма
Телепрограмма в твоем смарте Телепрограмма
Re: Урок 45. Список-дерево ExpandableListView
Всем привет. Уже спросил в соседней теме, но там вряд ли ответят. Вставляю в ExpandableListView свою картинку для индикатора раскрытия группы, но он растягивается по всей высоте groupView. Ширину можно настроить методом setIndicatorBounds(). Что я и делаю, и положение и ширина индикатора меня устраивают. Но вот что делать с высотой?