哈玛林.Xamarin android 在 ExpandableListView 中显示自定义布局



在我的应用程序中,我正在尝试有一个可扩展列表视图,并在自定义布局中显示。例如,我有这个可扩展列表视图

<ExpandableListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/expandableListView"/>

当我展开它时,我想用 3 个 imageView 显示这个布局

<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>

你知道我该怎么做吗?谢谢

你需要使用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示例。你可以参考它。

相关内容

  • 没有找到相关文章

最新更新