2013-08-21 2 views
5

Я пытаюсь создать ExpandableListView с SimpleExpandableListAdapter (я знаю, что я могу расширить сам новый адаптер, но я хочу попробовать simpleExapndableListAdapter).Как должны быть данные для SimpleExpandableListAdapter организован

Теперь я сталкиваюсь с проблемами при попытке создать новый экземпляр SimpleExpandableListAdapter.

Событие Я прочитал references, я не совсем уверен, что означают эти параметры, особенно groupData и childData.

Хотя я знаю, что мне нужно создать список Map и список list of Map, но какие данные следует поместить туда? Как их организовать?

Например, это данные, которые я хочу отобразить, как их организовать?

++Development Team 
    John 
    Bill 
++Data Process Team 
    Alice 
    David 

Кстати, это означает, что мне нужно создать два макета для группы и вид ребенка?

Я googled и читаю учебник снова и снова, но я не могу понять это.

Я надеюсь, что кто-то может дать объяснение.

ответ

7

Вот простой образец, который вы хотели, он очистит все ваши сомнения.

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import android.app.ExpandableListActivity; 
import android.os.Bundle; 
import android.widget.ExpandableListAdapter; 
import android.widget.SimpleExpandableListAdapter; 

public class SimpleExpandableListExampleActivity extends ExpandableListActivity { 
    private static final String NAME = "NAME"; 

    private ExpandableListAdapter mAdapter; 

    private String group[] = {"Development" , "Data Process Team"}; 
    private String[][] child = { { "John", "Bill" }, { "Alice", "David" } }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     List<Map<String, String>> groupData = new ArrayList<Map<String, String>>(); 
     List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>(); 
     for (int i = 0; i < group.length; i++) { 
      Map<String, String> curGroupMap = new HashMap<String, String>(); 
      groupData.add(curGroupMap); 
      curGroupMap.put(NAME, group[i]); 

      List<Map<String, String>> children = new ArrayList<Map<String, String>>(); 
      for (int j = 0; j < child[i].length; j++) { 
       Map<String, String> curChildMap = new HashMap<String, String>(); 
       children.add(curChildMap); 
       curChildMap.put(NAME, child[i][j]); 
      } 
      childData.add(children); 
     } 

     // Set up our adapter 
     mAdapter = new SimpleExpandableListAdapter(this, groupData, 
       android.R.layout.simple_expandable_list_item_1, 
       new String[] { NAME }, new int[] { android.R.id.text1 }, 
       childData, android.R.layout.simple_expandable_list_item_2, 
       new String[] { NAME }, new int[] { android.R.id.text1 }); 
     setListAdapter(mAdapter); 
    } 

} 

Все, что вам нужно сделать, это

  • Создание Android проекта с SimpleExpandableListExampleActivity как вашей основной деятельности ..
  • Скопируйте и вставьте код, указанный в этой деятельности.
  • Вот это .. Выполнить свой код ...

Надеется, что это помогает ...

+1

Он работает. Но мне интересно, как вы знаете ключ 'NAME' и как вы знаете идентификаторы« R.id.text1 »и т. Д.? Кстати, я обнаружил, что индикатор не выровнен с текстом, есть ли какая-то идея отрегулировать их? Посмотрите это: http: //i.imgur.com/aeznDf7.png – hguser

+0

Вы заметили, что «android.R.' используется .. это означает, что я использовал макет, который предлагает Android, я его не создал ... Вы можете найти что это правда, просто ** Нажмите Ctrl + android.R.layout.simple_expandable_list_item_1 ** Вы найдете присутствие TextView с именем text1 там ... Что касается выравнивания индикатора с текстом, то вы тестируете на эмуляторе ??, если да, то что (я не вижу здесь ...), проверьте реальное устройство ... Дайте мне знать, если хотите узнать что-то еще .. :) – CRUSADER

0

Существует буквально столько примеров для вашего требования!

В любом случае, возможно, вы захотите изучить этот блог, если у вас его уже нет.

http://www.coderzheaven.com/2011/04/10/expandable-listview-in-android-using-simpleexpandablelistadapter-a-simple-example/

«не означает, что я должен создать два макета для группы и мнение ребенка?»

Конечно, да! , Я имею в виду, что вы можете не создавать макеты, но опять же, это ваш выбор, и это связано в меньшей степени с ExpandableList.

Групповой список идеально будет содержать список команд, список команд = {«Команда разработчиков», «Данные Процесс Команда "} (Это будет в основном используется для отображения цели только как вычисления высоты списка и т.д.)

ChildList в идеале будет содержать список списков (HashMap из списков скорее)

HashMap> =

Команда разработчиков: Список = {"John", "Bill"} Команда обработки данных: Список = {"Джон", "Билл"}

0

Вам понадобятся два списка или массивы.

Родитель (Dev. Team и команда Process Data)

Родитель список регулярно один, вам придется добавить всех родителей, т.е. верхних элементов уровня.

Childrean

Основное различие между материнской и детской список, что список детей является списком списков.

Так, например, если вам нужны дети родителя вы будете делать что-то вроде этого

children.get(parentPosition) 

И если вам нужен конкретный ребенок

children.get(parentPosition).get(childPosition) 

Here вы можете найти пример использования BaseExpandableListAdapter

+0

'Родительского списку регулярна один, вы должны добавить все родителям, т.е. верхнему уровня,' детали. Мне просто интересно, почему список карт? Почему бы не использовать список строк? Например: 'groups = new ArrayList (); groups.add (" group1 ")?' – hguser

+0

Если вы расширите 'BaseExpandableListAdapter', вы можете использовать' ArrayList' любого типа объекта. Я не причина, почему Android-разработчики используют 'Map' на' SimpleExpandableListAdapter' – Axxiss

+0

Если первый 'children.get (parentPosition)' будет 'parent.get (parentPosition)'? – hguser

Смежные вопросы