以编程方式扩展/折叠组 [英] Programmatically Expand/Collapse Group

查看:91
本文介绍了以编程方式扩展/折叠组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想向用户显示所有单元及其所有子单元的列表,以便在ExpandableListView中进行选择,他们可以在其中检查要移动的单元.由于ListView内部似乎具有可单击的View,因此可以防止其自然扩展和折叠,因此我将简单地允许CheckedChange事件基于groupPosition进行扩展/折叠.但是,当我更改一个CheckBox上的复选框时,多个或所有组都会响应,而不仅仅是我正在单击的组.

I want to display to the user a list of all the units and all their sub-units to select from in an ExpandableListView where they can check off which ones they want to move. Since it would seem having clickable Views inside of the ListView prevents it from expanding and collapsing as it naturally would, I was going to simply allow the CheckedChange event to expand/collapse based on the groupPosition. But when I change the check on one CheckBox, several or all groups responds instead of just the group that I'm clicking in.

equiplistparent.axml

equiplistparent.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="35dp"
android:gravity="center_vertical">
<CheckBox
    android:id="@+id/check"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="45dp" />
<TextView
    android:id="@+id/info"
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:textSize="20dp"
    android:gravity="left" />
<AutoCompleteTextView
    android:id="@+id/sites"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:textSize="20dp"
    android:textColor="@android:color/black"
    android:background="@android:color/white"
    android:layout_margin="5dp"
    android:textCursorDrawable="@null"
    android:gravity="center_horizontal"
    android:hint="To Store" />
</LinearLayout>

自定义适配器

class EquipAdapter : BaseExpandableListAdapter
{
    private string[] Parent { get; set; }
    private List<List<CPEquipment>> Child { get; set; }
    private Context _context { get; set; }
    private IListAdapter _adapter { get; set; }
    private ExpandableListView _list { get; set; }

    public EquipAdapter(Context context, List<string> parent, List<List<CPEquipment>> child, IListAdapter adapter, ExpandableListView list)
    {
        _context = context;
        Parent = parent.ToArray();
        Child = child;
        _adapter = adapter;
        _list = list;
    }

    public override Object GetChild(int groupPosition, int childPosition)
    {
        List<CPEquipment> level1 = Child.ElementAt(groupPosition);
        CPEquipment level2 = level1.ElementAt(childPosition);

        return level2.Serial + " " + level2.Model;
    }

    public override long GetChildId(int groupPosition, int childPosition)
    {
        return Convert.ToInt32(groupPosition.ToString(CultureInfo.InvariantCulture) + childPosition.ToString(CultureInfo.InvariantCulture));
    }

    public override int GetChildrenCount(int groupPosition)
    {
        return Child.ElementAt(groupPosition).Count;
    }

    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(Android.Resource.Layout.SimpleExpandableListItem2, null);
        }

        TextView text = (TextView) convertView.FindViewById(Android.Resource.Id.Text2);
        text.Text = GetChild(groupPosition, childPosition).ToString();

        return convertView;
    }

    public override Object GetGroup(int groupPosition)
    {
        return Parent[groupPosition];
    }

    public override long GetGroupId(int groupPosition)
    {
        return groupPosition;
    }

    public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
    {
        if (convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater) _context.GetSystemService(Context.LayoutInflaterService);
            convertView = inflater.Inflate(Resource.Layout.equiplistparent, null);
        }

        TextView info = (TextView) convertView.FindViewById(Resource.Id.info);
        info.Text = GetGroup(groupPosition).ToString();
        AutoCompleteTextView acText = (AutoCompleteTextView) convertView.FindViewById(Resource.Id.sites);
        acText.Adapter = _adapter;

        CheckBox check = (CheckBox) convertView.FindViewById(Resource.Id.check);
        check.CheckedChange += (o, args) =>
                                   {
                                       int currGroup = groupPosition;
                                       if (args.IsChecked)
                                           _list.ExpandGroup(currGroup);
                                       else
                                       {
                                           _list.CollapseGroup(currGroup);
                                       }
                                   };
        return convertView;
    }

    public override bool IsChildSelectable(int groupPosition, int childPosition)
    {
        return true;
    }

    public override int GroupCount
    {
        get { return Parent.Length; }
    }

    public override bool HasStableIds
    {
        get { return true; }
    }

}

我尝试使用此建议解决此问题 ,但对ListViews自然扩展或折叠的功能没有影响.

I attempted working around this issue using this suggestion, but it made no difference in the ListViews ability to naturally expand or collapse.

我尝试将复选框放在子级而不是父级中,只是强制所有组都打开.但是现在,如果我选中3个框,则会再随机检查3个框.我知道有一种方法可以在ListViews中使用复选框,但是它们的行为不符合我的预期. MonoDroid有问题吗?

I tried putting the checkboxes in the children instead of parent and just forcing all groups to be open. But now if I check 3 of the boxes, 3 more boxes will just check themselves at random. I know there is a way to use checkboxes in ListViews, but they are not behaving as expected in mine. Is it an issue with MonoDroid?

推荐答案

我最近刚刚经历了这个过程,最终使它一切正常运行.我在此处发布了我的原始问题以及我的最终解决方案使一切正常.不确定是否能帮到您,但是听起来真的很接近我在使用解决方案时遇到的问题,我能够使其正常工作.

I just recently went through this myself and finally got it all working properly on my end. I posted my original question here along with my final solution to get everything working properly. Not sure if that will help you out, but it sounds REAL close to the issue that I was having and using my solution, I was able to get it working properly.

这篇关于以编程方式扩展/折叠组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆