簡體   English   中英

Xamarin android在ExpandableListView中顯示自定義布局

[英]Xamarin android display custom layout inside 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>

你知道我該怎么做嗎? 非常感謝你

您需要使用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示例項目 您可以參考它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM