具有可变级别数的 ExpandableListView

Posted

技术标签:

【中文标题】具有可变级别数的 ExpandableListView【英文标题】:ExpandableListView with a variable number of levels 【发布时间】:2016-03-07 15:07:33 【问题描述】:

我正在尝试创建一个,就像这样。

http://i.imgur.com/ukkCq7B.png

我已经按照这个示例创建了一个只有一级子级的 ExpandableListView:

https://gist.github.com/bowmanb/4052030

代码:

public class SavedTabsFragment extends Fragment 

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        View v = inflater.inflate(R.layout.saved_tabs, null);
        ExpandableListView elv = (ExpandableListView) v.findViewById(R.id.list);
        elv.setAdapter(new SavedTabsListAdapter());
        return v;
    

    public class SavedTabsListAdapter extends BaseExpandableListAdapter 

        private String[] groups =  "People Names", "Dog Names", "Cat Names", "Fish Names" ;

        private String[][] children = 
             "Arnold", "Barry", "Chuck", "David" ,
             "Ace", "Bandit", "Cha-Cha", "Deuce" ,
             "Fluffy", "Snuggles" ,
             "Goldy", "Bubbles" 
        ;

        @Override
        public int getGroupCount() 
            return groups.length;
        

        @Override
        public int getChildrenCount(int i) 
            return children[i].length;
        

        @Override
        public Object getGroup(int i) 
            return groups[i];
        

        @Override
        public Object getChild(int i, int i1) 
            return children[i][i1];
        

        @Override
        public long getGroupId(int i) 
            return i;
        

        @Override
        public long getChildId(int i, int i1) 
            return i1;
        

        @Override
        public boolean hasStableIds() 
            return true;
        

        @Override
        public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) 
            TextView textView = new TextView(SavedTabsFragment.this.getActivity());
            textView.setText(getGroup(i).toString());
            return textView;
        

        @Override
        public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) 
            TextView textView = new TextView(SavedTabsFragment.this.getActivity());
            textView.setText(getChild(i, i1).toString());
            return textView;
        

        @Override
        public boolean isChildSelectable(int i, int i1) 
            return true;
        

    


如何创建? ExpandableListView 是不是最好的选择?

【问题讨论】:

有人有答案吗? 【参考方案1】:

This post 解释了关于 3 级可扩展列表。希望这会有所帮助。

基本思想是,第一级列表由ExpandableListAdapter 支持。此适配器生成的子视图是 ExpandableListAdapters 本身,它们提供了二级组和最终的子元素。

【讨论】:

我正在寻找可变数量的级别,这意味着它可以是 1 级或 20 级。另外,我觉得这篇文章可能有点过时了,因为它已经快 4 年了。 好吧,我认为仅使用ExpandableListView 来实现您想要的并不是一个有效的解决方案。它会让事情变得一团糟。 是的,这就是我寻求指导的原因。

以上是关于具有可变级别数的 ExpandableListView的主要内容,如果未能解决你的问题,请参考以下文章

创建具有可变维数的 C++ 向量

如何“扁平化”具有可变列数的 Spark 模式?

使用具有可变单元数的引导网格

T-SQL 查询将数据插入到具有可变列数的表中

连接两个具有不同索引级别数的 MultiIndex DataFrame

使用 Itertools 具有内部中断的可变级别的嵌套循环