Xamarin android отображает пользовательский макет внутри ExpandableListView - PullRequest
0 голосов
/ 01 мая 2018

В моем приложении я пытаюсь иметь ExpandableListView и внутри собственного макета для отображения. Например, у меня есть этот ExpandableListView

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

, и когда я расширяю его, я хочу отобразить этот макет с 3-мя изображениями

<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 голосов
/ 07 мая 2018

Вам нужно использовать 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>

Я обнаружил образец примера ExpandableListView на GitHub. Вы можете сослаться на это.

...