在我的应用程序中,我正在尝试使用ExpandableListView并在自定义布局中显示。例如,我有这个ExpandableListView
<ExpandableListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/expandableListView"/>
当我展开它时,我想用3 imageViews
显示这个布局<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@mipmap/hat_off" />
<ImageView
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@mipmap/clothes_top_off" />
<ImageView
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@mipmap/clothes_bot_off" />
</LinearLayout>
你知道我怎么能这样做?非常感谢你
答案 0 :(得分:2)
您需要使用BaseExpandableListAdapter
。并使用GetChildView()
方法扩展要显示的布局。
首先,找到ExpandableListView
并设置适配器:
List<string> list = new List<string>();
list.Add("A");
list.Add("B");
list.Add("C");
list.Add("D");
ExpandableListView expandableListView = FindViewById<ExpandableListView>(Resource.Id.expandableListView);
expandableListView.SetAdapter(new ExpandableListAdapter(this, list));
ExpandableListAdapter
:
public class ExpandableListAdapter : BaseExpandableListAdapter
{
public override int GroupCount => data.Count;
public override bool HasStableIds => true;
private readonly Activity _context;
private List<string> data;
public ExpandableListAdapter(Activity context, List<string> list)
{
_context = context;
data = list;
}
public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
{
View header = convertView;
if (header == null)
{
header = _context.LayoutInflater.Inflate(Resource.Layout.GroupItem, null);
}
header.FindViewById<TextView>(Resource.Id.textView1).Text = data[groupPosition];
return header;
}
public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
{
row = _context.LayoutInflater.Inflate(Resource.Layout.DataItem, null);
}
///Find your ImageView and set data if you need
///ImageView img1 = row.FindViewById<ImageView>(Resource.Id.ImageView1)
///...
///...
return row;
}
public override Java.Lang.Object GetChild(int groupPosition, int childPosition)
{
return childPosition;
}
public override long GetChildId(int groupPosition, int childPosition)
{
return childPosition;
}
public override int GetChildrenCount(int groupPosition)
{
return 1;
}
public override Java.Lang.Object GetGroup(int groupPosition)
{
return groupPosition;
}
public override long GetGroupId(int groupPosition)
{
return groupPosition;
}
public override bool IsChildSelectable(int groupPosition, int childPosition)
{
return true;
}
}
GroupItem.axml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="25px"
android:minHeight="25px">
<TextView
android:text="Text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView1" />
</LinearLayout>
DataItem.axml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ImageView1"
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@mipmap/hat_off" />
<ImageView
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@mipmap/clothes_top_off" />
<ImageView
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@mipmap/clothes_bot_off" />
</LinearLayout>
我在GitHub上找到了ExpandableListView sample porject。你可以参考它。