Android ExpandableListView - 寻找教程[关闭]

Posted

技术标签:

【中文标题】Android ExpandableListView - 寻找教程[关闭]【英文标题】:Android ExpandableListView - Looking for a tutorial [closed] 【发布时间】:2012-04-07 02:53:05 【问题描述】:

我正在尝试编写一个 android 界面,该界面在一侧使用可扩展列表,在另一侧使用片段,因此我可以通过单击可扩展列表的子项来加载不同的资源。但不幸的是,我在任何地方都找不到关于这个列表的任何好的教程。是的,我查看了 API 演示,并使用 BaseExpandableListAdapter 制作了一个普通列表,但仍然要很好地理解这些列表,如果没有好的教程,你有什么好的教程或我可以检查的信息吗?

【问题讨论】:

我不敢相信这被标记为“不具建设性”!这是非常有建设性的,答案非常有帮助!感谢您发布这个问题,DeX03。 我相信这个标志是因为你没有在 *** 上提出你可以轻松研究的问题。 【参考方案1】:

创建项目列表

List<ParentItem> itemList = new ArrayList<ParentItem>();

ParentItem parent1 = new ParentItem();
parent1.getChildItemList().add(new ChildItem());
parent1.getChildItemList().add(new ChildItem());
parent1.getChildItemList().add(new ChildItem());

ParentItem parent2 = new ParentItem();
parent2.getChildItemList().add(new ChildItem());
parent2.getChildItemList().add(new ChildItem());
parent2.getChildItemList().add(new ChildItem());

itemList.add(parent1);
itemList.add(parent2);

ExpandableListViewAdapter adapter = new ExpandableListViewAdapter(context, itemList); 

数据对象

public class ParentItem 

        private List<ChildItem> childItemList;

        public ParentItem() 
                childItemList = new ArrayList<ChildItem>();
        

        public List<ChildItem> getChildItemList() 
                return childItemList;
        


public class ChildItem 
        // filll with your data

适配器

public class ExpandableListViewAdapter extends BaseExpandableListAdapter 

        private static final class ViewHolder 
                TextView textLabel;
        

        private final List<ParentItem> itemList;
        private final LayoutInflater inflater;

        public ExpandableListViewAdapter(Context context, List<ParentItem> itemList) 
                this.inflater = LayoutInflater.from(context);
                this.itemList = itemList;
        

        @Override
        public ChildItem getChild(int groupPosition, int childPosition) 

                return itemList.get(groupPosition).getChildItemList().get(childPosition);
        

        @Override
        public long getChildId(int groupPosition, int childPosition) 
                return childPosition;
        

        @Override
        public int getChildrenCount(int groupPosition) 
                return itemList.get(groupPosition).getChildItemList().size();
        

        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
                                 final ViewGroup parent) 
                View resultView = convertView;
                ViewHolder holder;


                if (resultView == null) 

                        resultView = inflater.inflate(android.R.layout.test_list_item, null); //TODO change layout id
                        holder = new ViewHolder();
                        holder.textLabel = (TextView) resultView.findViewById(android.R.id.title); //TODO change view id
                        resultView.setTag(holder);
                 else 
                        holder = (ViewHolder) resultView.getTag();
                

                final ChildItem item = getChild(groupPosition, childPosition);

                holder.textLabel.setText(item.toString());

                return resultView;
        

        @Override
        public ParentItem getGroup(int groupPosition) 
                return itemList.get(groupPosition);
        

        @Override
        public int getGroupCount() 
                return itemList.size();
        

        @Override
        public long getGroupId(final int groupPosition) 
                return groupPosition;
        

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View theConvertView, ViewGroup parent) 
                View resultView = theConvertView;
                ViewHolder holder;

                if (resultView == null) 
                        resultView = inflater.inflate(android.R.layout.test_list_item, null); //TODO change layout id
                        holder = new ViewHolder();
                        holder.textLabel = (TextView) resultView.findViewById(android.R.id.title); //TODO change view id
                        resultView.setTag(holder);
                 else 
                        holder = (ViewHolder) resultView.getTag();
                

                final ParentItem item = getGroup(groupPosition);

                holder.textLabel.setText(item.toString());

                return resultView;
        

        @Override
        public boolean hasStableIds() 
                return true;
        

        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) 
                return true;
        


给你

==============================
+Parent 1
==============================
-child 1.1
==============================
-child 1.2
==============================
-child 1.3
==============================
+Parent 2
==============================
-child 2.1
==============================
-child 2.2
==============================
-child 2.3
==============================

【讨论】:

但是,我如何处理列表子级的点击事件?因为这是我发现的所有教程的主要问题 Semi colon(;) 缺少&lt;ParentItem&gt; itemList = new ArrayList&lt;ParentItem&gt;() 我得到了 null holder.textLabel.setText(item.toString());,它是如何解决的? 这意味着“holder.textLabel”为空,你是否正确地膨胀它? 是的,您的代码刚刚被粘贴。我在private static final class ViewHolderThe member type ViewHolder cannot be declared static; static types can only be declared in static or top level types 得到编译时错误,在我删除static 后,它给了我运行时错误。【参考方案2】:

您可以通过以下链接找到可扩展列表视图的工作示例:

ExpandableListView

Expandable ListView in ANDROID

Android Expandable ListView simple Example in android.

点击孩子,可以这样处理。

getExpandableListView().setOnChildClickListener(new OnChildClickListener()                 
    public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id)  
        // your code...
    
);

希望这会对您有所帮助。 谢谢..

【讨论】:

但是对于不扩展 ExpandableListActivity 的活动来说,这种方式的工作方式不同,因为这就是我所拥有的,我该如何解决这个问题? 没关系,我刚刚修好了,帮了大忙!【参考方案3】:

这样你就可以处理事件了:

getExpandableListView().setOnChildClickListener(new OnChildClickListener() 
               
    public boolean onChildClick(ExpandableListView parent, 
        View v, int groupPosition, int childPosition, long id) 
     
        // your code...
    

【讨论】:

无关答案....

以上是关于Android ExpandableListView - 寻找教程[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录