自定义 ExpandableListView 中的可点击视图 [英] Clickable Views in Custom ExpandableListView

查看:23
本文介绍了自定义 ExpandableListView 中的可点击视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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 和绿色加号按钮应该是可选的",以便用户可以在字段中输入信息并单击该按钮而不会折叠组.并且子项中的 CheckBox 和红色 x 按钮也应该是可选的",以便用户可以选中 CheckBox 并单击该按钮.唯一真正有效的部分是 CheckBox 是可选的,并且组不会折叠,因为缺少更好的术语,组布局是死的",按下时什么也不做.而看似工作"的 CheckBox 甚至不是这样,因为它做了一件奇怪的事情,检查或取消选中一个会随机检查或取消选中其他.

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.

推荐答案

下面的代码是为了解决复选框问题CheckBox 甚至不是这样,因为它做了一件奇怪的事情,选中或取消选中一个会随机选中或取消选中其他."随着 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;
}

这篇关于自定义 ExpandableListView 中的可点击视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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