具有不同 children 的可扩展列表视图

Expandable List view with different children

我正在尝试制作每个组的最后一个 child 并编辑文本和按钮。我正在使用自定义 ExpandableListViewAdapter。这是我目前所拥有的。

  public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
    {
        if (convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
            convertView = inflater.Inflate(Resource.Layout.Children, null);
        }
        if (isLastChild==true)
        {
            EditText Submit = convertView.FindViewById<EditText>(Resource.Id.Submit);
            Button button = convertView.FindViewById<Button>(Resource.Id.Button);
            TextView textViewItem = convertView.FindViewById<TextView>(Resource.Id.DataValue);
            textViewItem.Visibility = ViewStates.Gone;
        }

        else {
            TextView textViewItem = convertView.FindViewById<TextView>(Resource.Id.DataValue);
            EditText Submit = convertView.FindViewById<EditText>(Resource.Id.Submit);
            Button button = convertView.FindViewById<Button>(Resource.Id.Button);
            button.Visibility = ViewStates.Gone;
            Submit.Visibility = ViewStates.Gone;
            string content = (string)GetChild(groupPosition, childPosition);
            textViewItem.Text = content;
        }
        return convertView;
    }

这有助于放置 EditText 和 Button,但仅限于第一组,同时还切断了第一组中的一些 children。

This helps put a EditText and Button but only in the first group while also cutting off some of the children in the first group.

ExpandableListView 重用子视图,因此如果您希望最后一行成为您的按钮和编辑文本,您需要明确地将其设置为可见。只需在您的 GetChildView 方法中添加三行代码:

public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
{
    if (convertView == null)
    {
        LayoutInflater inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
        convertView = inflater.Inflate(Resource.Layout.Children, null);
    }
    if (isLastChild == true)
    {
        EditText Submit = convertView.FindViewById<EditText>(Resource.Id.Submit);
        Button button = convertView.FindViewById<Button>(Resource.Id.Button);

        //add below two lines to your codes
        Submit.Visibility = ViewStates.Visible;
        button.Visibility = ViewStates.Visible;

        TextView textViewItem = convertView.FindViewById<TextView>(Resource.Id.DataValue);
        textViewItem.Visibility = ViewStates.Gone;
    }
    else
    {
        TextView textViewItem = convertView.FindViewById<TextView>(Resource.Id.DataValue);
        EditText Submit = convertView.FindViewById<EditText>(Resource.Id.Submit);
        Button button = convertView.FindViewById<Button>(Resource.Id.Button);
        button.Visibility = ViewStates.Gone;
        Submit.Visibility = ViewStates.Gone;
        //also add below line of codes
        textViewItem.Visibility = ViewStates.Visible;

        string content = (string)GetChild(groupPosition, childPosition);
        textViewItem.Text = content;
    }
    return convertView;
}