
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[34.238.189.240] |
![]() |
|
Сообщ.
#1
,
|
|
|
Есть класс
![]() ![]() public class AdapterHelper { final String ATR_GROUP_NAME = "gropuName"; final String ATR_PHONE_NAME = "phoneName"; String groups[]; String g_item[]; ArrayList<Map<String,String>> groupsData; ArrayList<Map<String,String>> childDataItem; ArrayList<ArrayList<Map<String,String>>> childData; Map<String,String> m; Context ctx; AdapterHelper(Context ctx, String groups[],String g_item[]) { this.ctx = ctx; this.groups = groups; this.g_item = g_item; } SimpleExpandableListAdapter adapter; SimpleExpandableListAdapter getAdapter() { groupsData = new ArrayList<Map<String, String>>(); for (String group : groups) { m = new HashMap<String, String>(); m.put(ATR_GROUP_NAME, group); groupsData.add(m); } String groupeFrom[] = {ATR_GROUP_NAME}; int groupTo[] = new int[]{android.R.id.text1}; childData = new ArrayList<ArrayList<Map<String, String>>>(); childDataItem = new ArrayList<Map<String, String>>(); for (String phone : g_item) { m = new HashMap<String, String>(); m.put(ATR_PHONE_NAME, phone); childDataItem.add(m); } childData.add(childDataItem); String childFrom[] = {ATR_PHONE_NAME}; int childTo[] = new int[]{android.R.id.text1}; adapter = new SimpleExpandableListAdapter(ctx, groupsData, simple_expandable_list_item_1, groupeFrom, groupTo, childData, android.R.layout.simple_list_item_1, childFrom, childTo); return adapter; } String getGroupText(int groupPos) { return ((Map<String,String>) (adapter.getGroup(groupPos))).get(ATR_GROUP_NAME); } String getChildText(int groupPos, int childPos) { return ((Map<String,String>) (adapter.getChild(groupPos, childPos))).get(ATR_PHONE_NAME); } String getGroupChildText(int groupPos, int childPos) { return getGroupText(groupPos) + " " + getChildText(groupPos, childPos); }} Хочу вызывать в MainActivity, что бы при каждом вызове добавлять группу и строки. ![]() ![]() private ExpandableListView expandableListView; private AdapterHelper ah; private SimpleExpandableListAdapter adapter; String groups[] = {"Group_1"}; String g_string[] = {"String","String_1","String_2"}; ah = new AdapterHelper(this,groups,g_string); adapter = ah.getAdapter(); expandableListView.setAdapter(adapter); Всё добавляется. Но только для одной группы. Что переделать что-бы при каждом отдельном вызове, добавлялась новая группа с строками? У меня в итоге добавляется только то, что было вызвано последним. ![]() ![]() String groups[] = {"Group_1"}; String strings_1[] = {"String_1","String_2","String_3"}; String groups1[] = {"Group_2"}; String strings_2[] = {"String_1","String_2","String_3"}; ah = new AdapterHelper(this,groups,strings_1); ah1 = new AdapterHelper(this,groups1,strings_2); adapter = ah.getAdapter(); adapter = ah1.getAdapter(); expandableListView.setAdapter(adapter); Т.е не добавляется, а перезаписывает существующую группу. Решил попробовать следующее: В конструктор добавить второй параметр, к примеру String g_item_2[], а в сам метод второй вызов ![]() ![]() childDataItem = new ArrayList<Map<String, String>>(); for (String phone : g_item_2) { m = new HashMap<String, String>(); m.put(ATR_PHONE_NAME, phone); childDataItem.add(m); } childData.add(childDataItem); получилось что если вызывать ![]() ![]() String groups[] = {"Group_11","TEST"}; String strings_1[] = {"String_11","String_2","String_3"}; String strings_2[] = {"String_1","String_2","String_3"}; textView = (TextView)findViewById(R.id.textView); ah = new AdapterHelper(this,groups,strings_1,strings_2); adapter = ah.getAdapter(); то добавляет как надо. Но это не то, идет дублирование кода во первых, а во вторых теряется весь смысл, как выход использовать цикл, в котором идет перебор добавляемых массивов строк в конструкторе. И вот тут то проблема, не могу понять как соорудить этот цикл, а точнее как во второй итерации, подставить следующий массив строк. К примеру: ![]() ![]() for(int a = 0; a < 2; a++) //Кол-во массивов строк в конструкторе { childDataItem = new ArrayList<Map<String, String>>(); for (int a =0; a < g_item.length; a++ ) { m = new HashMap<String, String>(); m.put(ATR_PHONE_NAME, g_item[a]); childDataItem.add(m); } childData.add(childDataItem); } т.е добавится первый массив g_item. Как в следующую итерацию подставить следующий массив g_item_2 ? |
Сообщ.
#2
,
|
|
|
Всё сделал. Заработало как надо.
|