gpt4 book ai didi

ANDROID - ExpandableListView

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:28 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何构建包含(许多)的 View :

  • PARENT1(可勾选、可扩展)
  • CHILD1(单选按钮)
  • CHILD2(单选按钮)

...

  • PARENT2(可勾选、可扩展)
  • CHILD1(可检查)
  • CHILD2(可检查)

...

重点是父级必须是可检查的,并且基于子级必须更改图标。有人能给我指出正确的方向吗,因为从我发现的情况来看,似乎没有什么对我有用。

最佳答案

我假设,您的数据以某种方式构建,例如:ArrayList 其中

  • 父级 {name:String, checked:boolean, children :ArrayList}和
  • child {name:String}

如果是这样,你只需要做两件事:

  1. 为您创建合适的布局父项渲染器和子项渲染器
  2. 将 BaseExpandableListAdapter 扩展为自己建立 list 。

以下是关于我的想法的一个小示例:
layout/grouprow.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:orientation="horizontal"
android:gravity="fill" android:layout_width="fill_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- PARENT -->
<TextView android:id="@+id/parentname" android:paddingLeft="5px"
android:paddingRight="5px" android:paddingTop="3px"
android:paddingBottom="3px" android:textStyle="bold" android:textSize="18px"
android:layout_gravity="fill_horizontal" android:gravity="left"
android:layout_height="wrap_content" android:layout_width="wrap_content" />
<CheckBox android:id="@+id/checkbox" android:focusable="false"
android:layout_alignParentRight="true" android:freezesText="false"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="5px" />
</RelativeLayout>

layout/childrow.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:padding="0px">
<!-- CHILD -->
<TextView android:id="@+id/childname" android:paddingLeft="15px"
android:paddingRight="5px" android:focusable="false" android:textSize="14px"
android:layout_marginLeft="10px" android:layout_marginRight="3px"
android:layout_width="fill_parent" android:layout_height="wrap_content" />
</LinearLayout>

MyELAdapter 类:我已将其声明为 MyExpandableList 的内部类,因此我可以直接访问父列表,而无需将其作为参数传递。

private class MyELAdapter extends BaseExpandableListAdapter
{
private LayoutInflater inflater;

public MyELAdapter()
{
inflater = LayoutInflater.from(MyExpandableList.this);
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parentView)
{
final Parent parent = parents.get(groupPosition);
convertView = inflater.inflate(R.layout.grouprow, parentView, false);
((TextView) convertView.findViewById(R.id.parentname)).setText(parent.getName());
CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.checkbox);
checkbox.setChecked(parent.isChecked());
checkbox.setOnCheckedChangeListener(new CheckUpdateListener(parent));
if (parent.isChecked())
convertView.setBackgroundResource(R.color.red);
else
convertView.setBackgroundResource(R.color.blue);
return convertView;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parentView)
{
final Parent parent = parents.get(groupPosition);
final Child child = parent.getChildren().get(childPosition);
convertView = inflater.inflate(R.layout.childrow, parentView, false);
((TextView) convertView.findViewById(R.id.childname)).setText(child.getName());
return convertView;
}

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

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

@Override
public int getChildrenCount(int groupPosition)
{
return parents.get(groupPosition).getChildren().size();
}

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

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

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

@Override
public void notifyDataSetChanged()
{
super.notifyDataSetChanged();
}

@Override
public boolean isEmpty()
{
return ((parents == null) || parents.isEmpty());
}

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

@Override
public boolean hasStableIds()
{
return true;
}

@Override
public boolean areAllItemsEnabled()
{
return true;
}
}

您必须已经有一个公共(public)类 MyExpandableList extends ExpandableListActivity,它有一个成员:

private ArrayList<Parent> parents;

在你为这个成员赋值/加载父列表之后,你还应该将你的适配器附加到这个 View :

this.setListAdapter(new MyELAdapter());

就是这样。您有一个可检查可扩展列表,在 CheckUpdateListeneronCheckedChanged(CompoundButton buttonView, boolean isChecked) 方法中,您可以更新父对象的选中状态。

请注意,背景颜色是在 getGroupView 方法中确定的,因此您不必在任何地方更改它,只需在需要时调用适配器的 notifyDataSetChanged() 方法即可。

更新

您可以从this link 下载示例源代码。 .它是一个eclipse 项目,但如果您使用其他开发环境,只需复制必要的源文件(java + xml)即可。

关于ANDROID - ExpandableListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5645104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com