使用嵌套LinkedHashMap的ExpandableListAdapter

时间:2015-09-01 07:22:00

标签: java android 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提取到其中吗?

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:0)

我建议你将标题数据和子数据保存在单独的列表中。我喜欢做的是,我有单独的参考中的子和标题数据。所以我的构造函数看起来像这样

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

    }

所以在get孩子中你这样做。

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

答案 1 :(得分:0)

好的,所以我解决了这个问题,这很简单。我创建了一个自己的自定义适配器,它接收LinkedHashMap。我将密钥提取到List中,用作组标题。然后,适配器提取嵌套的LinkedHashMap,这些键用作子菜单项名称。