Урок 45. Список-дерево ExpandableListView
Re: Урок 45. Список-дерево ExpandableListView
String[] data = getResources().getTextArray(R.array.secondlines);
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
rezak90 как всегда оперативен.
Только что нашел в Интернете: String[] groups = getResources().getStringArray(R.array.groups);
Спасибо.
Только что нашел в Интернете: String[] groups = getResources().getStringArray(R.array.groups);
Спасибо.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
Рано радовался.
Поменял на
String[] groups = getResources().getStringArray(R.array.groups);
String[] productsVeg = getResources().getStringArray(R.array.productsVeg);
и перестала исполняться.
Может в strings что-то не так отображаю:
Подскажите пожалуйста.
Поменял на
String[] groups = getResources().getStringArray(R.array.groups);
String[] productsVeg = getResources().getStringArray(R.array.productsVeg);
и перестала исполняться.
Может в strings что-то не так отображаю:
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MainActivity</string>
<string-array name="groups">
<item>Овощи</item>
<item>Фрукты</item>
<item>Молочные продукты</item>
<item>Бакалея</item>
</string-array>
<string-array name="productsVeg">
<item>Картошка</item>
<item>Морковь</item>
<item>Лук</item>
<item>Чеснок</item>
<item>Баклажаны</item>
<item>Помидоры</item>
<item>Огурцы</item>
<item>Капуста</item>
<item>Свекла</item>
<item>Редька</item>
<item>Зелень</item>
</string-array>
Re: Урок 45. Список-дерево ExpandableListView
файл ресурсов вроде бы правильный. А на чём валится и какая ошибка?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
Удивительно
Просто скопипастил урок, решил, что разбираться лучше на утро (действительно, понять сразу сложно). Дай думаю объявлю массивы в strings файле, а не в самом коде. Меняю на то, что внизу, не трогая всего остального (замена телефонов на продукты питания, думаю не в счет), а она пройдя debugging выдает мне has stopped unexpectedly. Вернулся к объявлению массива в коде (как в уроке), все работает.
Просьба, объясните в чем дело.
Просто скопипастил урок, решил, что разбираться лучше на утро (действительно, понять сразу сложно). Дай думаю объявлю массивы в strings файле, а не в самом коде. Меняю на то, что внизу, не трогая всего остального (замена телефонов на продукты питания, думаю не в счет), а она пройдя debugging выдает мне has stopped unexpectedly. Вернулся к объявлению массива в коде (как в уроке), все работает.
Код: Выделить всё
import android.app.Activity;
import android.os.Bundle;
import android.widget.ExpandableListView;
import android.widget.SimpleExpandableListAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends Activity {
// названия групп продуктов
String[] groups = getResources().getStringArray(R.array.groups);
// названия продуктов (элементов)
String[] productsVeg = getResources().getStringArray(R.array.productsVeg);
String[] productsFruit = getResources().getStringArray(R.array.productsFruit);
String[] productsMilk = getResources().getStringArray(R.array.productsMilk);
String[] productsGros = getResources().getStringArray(R.array.productsGros);
// коллекция для групп
ArrayList<Map<String, String>> groupData;
// коллекция для элементов одной группы
ArrayList<Map<String, String>> childDataItem;
// общая коллекция для коллекций элементов
ArrayList<ArrayList<Map<String, String>>> childData;
// в итоге получится childData = ArrayList<childDataItem>
// список аттрибутов группы или элемента
Map<String, String> m;
ExpandableListView elvMain;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// заполняем коллекцию групп из массива с названиями групп
groupData = new ArrayList<Map<String, String>>();
for (String group : groups) {
// заполняем список аттрибутов для каждой группы
m = new HashMap<String, String>();
m.put("groupName", group); // имя групп продуктов
groupData.add(m);
}
// список аттрибутов групп для чтения
String groupFrom[] = new String[]{"groupName"};
// список ID view-элементов, в которые будет помещены аттрибуты групп
int groupTo[] = new int[]{android.R.id.text1};
// создаем коллекцию для коллекций элементов
childData = new ArrayList<ArrayList<Map<String, String>>>();
// создаем коллекцию элементов для первой группы
childDataItem = new ArrayList<Map<String, String>>();
// заполняем список аттрибутов для каждого элемента
for (String product: productsVeg) {
m = new HashMap<String, String>();
m.put("productName", product); // название продукта
childDataItem.add(m);
}
// добавляем в коллекцию коллекций
childData.add(childDataItem);
// создаем коллекцию элементов для второй группы
childDataItem = new ArrayList<Map<String, String>>();
for (String product : productsFruit) {
m = new HashMap<String, String>();
m.put("productName", product);
childDataItem.add(m);
}
childData.add(childDataItem);
// создаем коллекцию элементов для третьей группы
childDataItem = new ArrayList<Map<String, String>>();
for (String product : productsMilk) {
m = new HashMap<String, String>();
m.put("productName", product);
childDataItem.add(m);
}
childData.add(childDataItem);
// создаем коллекцию элементов для четвертой группы
childDataItem = new ArrayList<Map<String, String>>();
for (String product : productsGros) {
m = new HashMap<String, String>();
m.put("productName", product);
childDataItem.add(m);
}
childData.add(childDataItem);
// список аттрибутов элементов для чтения
String childFrom[] = new String[]{"productName"};
// список ID view-элементов, в которые будет помещены аттрибуты элементов
int childTo[] = new int[]{android.R.id.text1};
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);
elvMain = (ExpandableListView) findViewById(R.id.elvMain);
elvMain.setAdapter(adapter);
}
}
Re: Урок 45. Список-дерево ExpandableListView
Объявление массивов нужно оставить без инициализации.
Инициализировать в onCreate()
В конструкторе Activtity ещё неизвестен контекст, поэтому ресурсы ещё не могут быть загружены.
Инициализировать в onCreate()
Код: Выделить всё
String[] productsVeg;
String[] productsFruit;
String[] productsMilk;
String[] productsGros;
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
productsVeg = getResources().getStringArray(R.array.productsVeg);
productsFruit = getResources().getStringArray(R.array.productsFruit);
productsMilk = getResources().getStringArray(R.array.productsMilk);
productsGros = getResources().getStringArray(R.array.productsGros);
...
}
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
Объявил, потом вызвал и все сработало. Радует, что догнал сам.
Вам большое спасибо.
Вам большое спасибо.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
В конструкторе класса SimpleExpandableListAdapter указываются только две коллекции для групп и элементов, соответственно:
List<? extends Map<String, ?>> groupData
List<? extends List<? extends Map<String, ?>>> childData
есть ли в других адапторах возможность наращивать количество коллекций
Заранее спасибо за разъяснение.
List<? extends Map<String, ?>> groupData
List<? extends List<? extends Map<String, ?>>> childData
есть ли в других адапторах возможность наращивать количество коллекций
Заранее спасибо за разъяснение.
Re: Урок 45. Список-дерево ExpandableListView
а зачем их наращивать? зачем адаптеру больше чем две коллекции?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
ну, например страна-производитель-телефон, т.е. группа-элемент-подэлемент и т.д.
если это не предусмотрено в android, то как это реализовать в приложении.
если это не предусмотрено в android, то как это реализовать в приложении.
Re: Урок 45. Список-дерево ExpandableListView
так реализовать это можно десятками способов, всё зависит от дизайна который нужно. Если нужно что бы это выглядило как дерево то это в андроиде будет не красиво. А вот более менее что первое в голову пришло так это спинерами сделать страну и производителя а ниже их будет listview в котором отображаются телефоны. Вот как то так = )
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
Понял, спасибо.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
Опять вопрос.
В adapter установил layout для группы: android.R.layout.simple_expandable_list_item_1,
для элементов: android.R.layout.simple_list_item_multiple_choice,
однако checkbox элементов не отображает галку при нажатии, хотя сам бокс и ее фоновое изображение присутствуют.
Попытался выставить: elvMain.setChoiceMode(ExpandableListView.CHOICE_MODE_MULTIPLE); как в предыдущем уроке, не помогло. В чем может быть проблема?
В adapter установил layout для группы: android.R.layout.simple_expandable_list_item_1,
для элементов: android.R.layout.simple_list_item_multiple_choice,
однако checkbox элементов не отображает галку при нажатии, хотя сам бокс и ее фоновое изображение присутствуют.
Попытался выставить: elvMain.setChoiceMode(ExpandableListView.CHOICE_MODE_MULTIPLE); как в предыдущем уроке, не помогло. В чем может быть проблема?
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
Проведя весь вечер в поисках ответа на свой вопрос, понял, что впервые столкнулся с недоработкой разработчиков Android.
Заменил в адаптере layout для элементов: android.R.layout.simple_list_item_multiple_choice, на свой my_layout, описав в нем TextView и CheckBox. Также пришлось указать свой TextView из my_layout для списка ID view-элементов
int childTo[] = new int[]{R.id.textView_1};
Вроде все сработало, элементы отображаются, и checkbox чекится, но при клике чекятся несколько боксов сразу (причем не важно нажимается ли непосредственно checkbox или отображаемый элемент).
Насколько я понял, все это как то связано с View, но не могу понять как.
Хотелось бы получить разъяснение роли View и если можно, пример, как решить проблему.
Заранее спасибо.
Заменил в адаптере layout для элементов: android.R.layout.simple_list_item_multiple_choice, на свой my_layout, описав в нем TextView и CheckBox. Также пришлось указать свой TextView из my_layout для списка ID view-элементов
int childTo[] = new int[]{R.id.textView_1};
Вроде все сработало, элементы отображаются, и checkbox чекится, но при клике чекятся несколько боксов сразу (причем не важно нажимается ли непосредственно checkbox или отображаемый элемент).
Насколько я понял, все это как то связано с View, но не могу понять как.
Хотелось бы получить разъяснение роли View и если можно, пример, как решить проблему.
Заранее спасибо.
Re: Урок 45. Список-дерево ExpandableListView
dil_android это не есть недаработка разработчиков, просто нужно потренероваться писать кастомные адаптеры.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
а по существу? Хотелось бы понять роль View, и решение этой проблемы.
Что касается разработчиков, то, что им мешало включить такую же возможность setChoiceMode(ExpandableListView.CHOICE_MODE_MULTIPLE/SINGLE) в адаптере ExpandableListView?
Что касается разработчиков, то, что им мешало включить такую же возможность setChoiceMode(ExpandableListView.CHOICE_MODE_MULTIPLE/SINGLE) в адаптере ExpandableListView?
Re: Урок 45. Список-дерево ExpandableListView
меня не множко насторожил такой кусочек кода:Хотелось бы понять роль View, и решение этой проблемы.
Код: Выделить всё
//для списка ID view-элементов
int childTo[] = new int[]{R.id.textView_1};
это всё можно сделать ручками.Что касается разработчиков, то, что им мешало включить такую же возможность setChoiceMode(ExpandableListView.CHOICE_MODE_MULTIPLE/SINGLE) в адаптере ExpandableListView?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
Адаптер:
и
my_layout
main
остальное как в примере, не менял. Судя по тому, что нашел в Инете, решение вопроса лежит в изменении которое происходит с View, когда мы кликаем. Выложенные коды сложны для моего понимания на данном этапе. Поэтому и нуждаюсь в разъяснении, чтобы дальше по Адаптерам двигалось легче.
Код: Выделить всё
adapter = new SimpleExpandableListAdapter(
ctx,
groupData,
android.R.layout.simple_expandable_list_item_1,
groupFrom,
groupTo,
childData,
R.layout.[color=#FF0000]my_layout,[/color] // вместо android.R.layout.simple_list_item_multiple_choice
childFrom,
childTo);
return adapter;
}
Код: Выделить всё
int childTo[] = new int[]{[color=#FF0000]R.id.textView_1[/color]}; //вместо text1
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:textSize="20sp"
android:text=""
android:focusable="false">
</TextView>
<CheckBox android:id="@+id/checkbox_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false">
</CheckBox>
</LinearLayout>
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tvInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<ExpandableListView
android:id="@+id/elvMain"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ExpandableListView>
</LinearLayout>
</LinearLayout>
Re: Урок 45. Список-дерево ExpandableListView
всё потому что писал бы кастомный адаптер то знал бы в чём ошибка, а так дефолтный использовать конечно будет где то ошибка и ищи потом где.
И мне кажется что CHOICE_MODE_MULTIPLE работает при дефолтной разметки и выделяет весь child layout и по этому чекбокс и не будет выделяться. Создай кастомный адаптер и прикрути к child layout оброботчик нажатия который будет чекать чекбокс, вот и все дела =)
И мне кажется что CHOICE_MODE_MULTIPLE работает при дефолтной разметки и выделяет весь child layout и по этому чекбокс и не будет выделяться. Создай кастомный адаптер и прикрути к child layout оброботчик нажатия который будет чекать чекбокс, вот и все дела =)
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 45. Список-дерево ExpandableListView
Да, скорее всего так и сделаю. Может по изучении всего материала выложенного по адаптерам смогу сам довести ситуацию. Слишком много времени отнял этот SimpleExpandableListAdapter.
Как говорится пойдем дальше. Будут вопросы, будем спрашивать.
Как говорится пойдем дальше. Будут вопросы, будем спрашивать.