在自定义ExpandableListView可点击查看点击查看、自定义、ExpandableListView

2023-09-04 05:07:57 作者:绝无仅有的特别。

transferAvailPowered.axml

transferAvailPowered.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="wrap_content"
android:focusable="false"
android:layout_margin="5dp"
android:padding="5dp"
android:gravity="left">
<TextView
    android:id="@+id/availSerial"
    android:layout_width="0dp"
    android:layout_weight=".30"
    android:layout_height="wrap_content"
    android:layout_marginLeft="45dp"
    android:layout_marginRight="5dp"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp"
    android:focusable="false"
    android:padding="5dp"
    android:gravity="left" />
<TextView
    android:id="@+id/availModel"
    android:layout_width="0dp"
    android:layout_weight=".30"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:focusable="false"
    android:padding="5dp"
    android:gravity="left" />
<AutoCompleteTextView
    android:id="@+id/availSite"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:hint="To Site"
    android:background="@android:color/white"
    android:textColor="@android:color/black"
    android:textCursorDrawable="@null"
    android:focusable="false"
    android:layout_margin="5dp"
    android:gravity="left" />
<ImageButton
    android:id="@+id/addToTransfer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:layout_margin="5dp"
    android:background="@drawable/addsmall"
    android:focusable="false"
    android:gravity="left" />

transferAvailAttached.axml

transferAvailAttached.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="wrap_content"
android:focusable="false"
android:layout_margin="5dp"
android:padding="5dp">
<TextView
    android:id="@+id/availSerial"
    android:layout_width="0dp"
    android:layout_weight=".30"
    android:focusable="false"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:padding="5dp"
    android:gravity="right" />
<TextView
    android:id="@+id/availModel"
    android:layout_width="0dp"
    android:layout_weight=".30"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:layout_margin="5dp"
    android:padding="5dp"
    android:gravity="center" />
<CheckBox
    android:id="@+id/include"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="left|center_vertical"
    android:focusable="false"
    android:layout_marginRight="30dp"
    android:background="@drawable/bg_checkbox" />
<ImageButton
    android:id="@+id/removeAttachment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:padding="5dp"
    android:layout_margin="5dp"
    android:background="@drawable/deletesmall"
    android:gravity="right" />

适配器

class EquipAdapter : BaseExpandableListAdapter
{
    private List<CPEquipment> 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<CPEquipment> parent, List<List<CPEquipment>> child, IListAdapter adapter, ExpandableListView list)
    {
        _context = context;
        Parent = parent;
        Child = child;
        _adapter = adapter;
        _list = list;
    }

    public override Java.Lang.Object GetChild(int groupPosition, int childPosition)
    {
        List<CPEquipment> level1 = Child.ElementAt(groupPosition);
        CPEquipment level2 = level1.ElementAt(childPosition);
        E e = new E() {Serial = level2.Serial, Model = level2.Model};
        return e;
    }

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

        E e = (E)GetChild(groupPosition, childPosition);
        TextView serial = (TextView)convertView.FindViewById(Resource.Id.availSerial);
        serial.Text = e.Serial;
        TextView model = (TextView)convertView.FindViewById(Resource.Id.availModel);
        model.Text = e.Model;          

        return convertView;
    }

    public override Object GetGroup(int groupPosition)
    {
        CPEquipment c = Parent.ElementAt(groupPosition);
        E e = new E(){Serial = c.Serial, Model = c.Model, Type = c.Status}; 

        return e;
    }

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

    public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
    {
        E e = (E)GetGroup(groupPosition);

        if (convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater)_context.GetSystemService(Context.LayoutInflaterService);
                convertView = inflater.Inflate(Resource.Layout.transferAvailPowered, null);
     }

        TextView serial = (TextView)convertView.FindViewById(Resource.Id.availSerial);
        serial.Text = e.Serial;
        TextView model = (TextView)convertView.FindViewById(Resource.Id.availModel);
        model.Text = e.Model;
        AutoCompleteTextView acText = (AutoCompleteTextView)convertView.FindViewById(Resource.Id.availSite);
        acText.Adapter = _adapter;

        _list.ExpandGroup(groupPosition);

        return convertView;
    }

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

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

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

}

结果:

在这种情况下,AutoCompleteTextView父组和绿色的加号按钮应该是选择,使用户可以输入信息到字段,然后单击该按钮而不破坏小组。而在孩子的复选框,红色的X按钮也应该是选择,使用户可以选中该复选框,然后单击按钮。那实际工作中只有一部分是复选框是被选择的组不崩溃,因为没有更好的术语,该集团布局是死的,所以没有任何当pressed。而看似工作复选框未即便如此,因为它这样做奇怪的事情在这里选中或取消选中一会随机选择或不选择其他。

In this scenario, the AutoCompleteTextView in the parent group and the green plus button should be "selectable" so that the user can input the info into the field and click that button without collapsing the group. And the CheckBox and the red x button in the child should also be "selectable" so the user can check the CheckBox and click the button. The only part of that that actually works is that the CheckBox is selectable and the group doesn't collapse because for lack of a better term, the group layout is "dead" and does nothing when pressed. And the seemingly "working" CheckBox isn't even so because it does this weird thing where checking or unchecking one will randomly check or uncheck others.

推荐答案

下面code是解决问题的复选框复选框未即便如此,因为它这样做奇怪的事情在这里选中或取消选中一会随机选择或取消其他。随着的ImageButton和CheckBox处理。

Below code is to resolve checkbox problem "CheckBox isn't even so because it does this weird thing where checking or unchecking one will randomly check or uncheck others." Along with ImageButton and CheckBox handling.

public override View GetChildView(final int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
{
    LayoutInflater inflater = (LayoutInflater)_context.GetSystemService(Context.LayoutInflaterService);
    convertView = inflater.Inflate(Resource.Layout.transferAvailAttached, null);

    E e = (E)GetChild(groupPosition, childPosition);
    TextView serial = (TextView)convertView.FindViewById(Resource.Id.availSerial);
    serial.Text = e.Serial;
    TextView model = (TextView)convertView.FindViewById(Resource.Id.availModel);
    model.Text = e.Model;     

    CheckBox include = (CheckBox)convertView.FindViewById(Resource.Id.include); 

    include.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            //DO your checkbox handling here
        }
    });

    ImageButton removeAttachment =(CheckBox)convertView.FindViewById(Resource.Id. removeAttachment);  

    removeAttachment.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //DO your imageButton handling here
        }
    });

    return convertView;
}

public override View GetGroupView(final int groupPosition, bool isExpanded, View convertview, ViewGroup parent)
{
    View convertView = convertview;
    if (convertView == null) 
    {
        E e = (E)GetGroup(groupPosition);

        LayoutInflater inflater = (LayoutInflater)_context.GetSystemService(Context.LayoutInflaterService);
        convertView = inflater.Inflate(Resource.Layout.transferAvailPowered, null);
    }

    TextView serial = (TextView)convertView.FindViewById(Resource.Id.availSerial);
    serial.Text = e.Serial;
    TextView model = (TextView)convertView.FindViewById(Resource.Id.availModel);
    model.Text = e.Model;
    AutoCompleteTextView acText = (AutoCompleteTextView)convertView.FindViewById(Resource.Id.availSite);
    acText.Adapter = _adapter;

    ImageButton addToTransfer =(CheckBox)convertView.FindViewById(Resource.Id. addToTransfer);  

    addToTransfer.setOnClickListener(new OnClickListener() {                        
        public void onClick(View v) {
            // TODO Auto-generated method stub

            //DO your addToTransfer imageButton handling here

        }
    });

    _list.ExpandGroup(groupPosition);

    return convertView;
}