Xamarin android在ExpandableListView中显示自定义布局

时间:2018-05-01 09:10:30

标签: android xamarin.android expandablelistview

在我的应用程序中,我正在尝试使用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>

你知道我怎么能这样做?非常感谢你

1 个答案:

答案 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。你可以参考它。