2015-09-01 2 views
0

Добрых утра, ребят,ExpandableListAdapter с помощью вложенной LinkedHashMap

Мне нужно создать пользовательский адаптер, используя следующий вложенный связанный HashMap: LinkedHashMap<String, LinkedHashMap<String, Class<?>>>. Я расширяю BaseExpandableListAdapter и внедряю необходимые методы. Я написал следующий код, чтобы получить имена групп из LinkedHashMap:

private Context context; 
    private LinkedHashMap<String, LinkedHashMap<String, Class<?>>> menuOptions; 

    public customMenuAdapter(Context context, LinkedHashMap<String, LinkedHashMap<String, Class<?>>> menuOptions) 
    { 
     this.context = context; 
     this.menuOptions = menuOptions; 
    } 

    @Override 
    public Object getGroup(int groupPosition) 
    { 
     return this.menuOptions.get(groupPosition); 
    } 

    @Override 
    public long getGroupId(int groupPosition) 
    { 
     return groupPosition; 
    } 

    @Override 
    public int getGroupCount() 
    { 
     return this.menuOptions.size(); 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
    { 
     String gpsMenuGroupTitle = (String) getGroup(groupPosition); 

     if (convertView == null) { 
      LayoutInflater gpsGroupInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = gpsGroupInflater.inflate(R.layout.gps_menu_list_header, null); 
     } 

     TextView gpsListHeaderText = (TextView) convertView.findViewById(R.id.gps_menu_list_header); 
     gpsListHeaderText.setText(gpsMenuGroupTitle); 

     return convertView; 
    } 

Я должен получить дочерние элементы из вложенного LinkedHashMap, и я понятия не имею, как это сделать.

В способе getChild я просто return this.menuOptions.get(groupPosition).get(childPosition);? Должен ли я создать поле и извлечь в него вложенный LinkedHashMap?

Любой совет будет оценен!

ответ

0

Хорошо, поэтому я решил эту проблему, и все было довольно просто. Я создал собственный пользовательский адаптер, который получает LinkedHashMap. Я извлекаю ключи в List, который используется в качестве заголовков групп. Затем адаптер извлекает вложенные LinkedHashMap, ключи используются как имена элементов детского меню.

0

Я предлагаю вам сохранить данные заголовка и дочерние данные в отдельном списке. Мне нравится делать, у меня есть дочерние и заголовочные данные в отдельной ссылке. Итак, мой конструктор выглядит так:

public ExpandableListAdapter(Context _context, List<String> _headerDataList, HashMap<String, List<String>> _childDataList) 
    { 
     this._context = _context; 
     this._headerDataList = _headerDataList; 
     this._childDataList = _childDataList; 

    } 

Так что в случае с ребенком вы это делаете.

@Override 
    public Object getChild(int groupPosition, int childPosition) { 
     return _childDataList.get(_headerDataList.get(groupPosition)).get(childPosition); 
    } 
+0

Это то, что я сделал первоначально, но мой работодатель настаивает на том, что мы используем вложенный 'LinkedHashMap'. Мы планируем позже масштабировать и делать это таким образом, что упрощает масштабирование в теории, но делает создание начальных «суперклассов» намного сложнее, и я зацикливаюсь на этом. Обидно поставить код в «LinkedHashMap» не слишком сложно, но работа с ним в адаптере тогда сложнее –

+0

Так что я думаю, что это будет вложенный LinkedHashMap. Затем в вашем getchild() вы будете делать что-то вроде этого. Строка key = menuoption.get (groupPosition) menuOptions.get (key) .get (key) .getClass(); – umerk44