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(;)
缺少<ParentItem> itemList = new ArrayList<ParentItem>()
我得到了 null holder.textLabel.setText(item.toString());
,它是如何解决的?
这意味着“holder.textLabel”为空,你是否正确地膨胀它?
是的,您的代码刚刚被粘贴。我在private static final class ViewHolder
即The 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 用户权限 )