【问题标题】:ExpandableListView click group without expandingExpandableListView 点击组不展开
【发布时间】:2017-10-14 16:21:37
【问题描述】:

情况:

我正在设置ExpandableListView 的事件处理程序。我目前有一个组点击事件和一个展开事件。

编码:

    private void ListView_GroupExpand(object sender, ExpandableListView.GroupExpandEventArgs e)
    {
        var dialogBuilder = new AlertDialog.Builder(this);
        dialogBuilder.SetTitle(Resource.String.group_title);
        dialogBuilder.SetMessage(string.Format("Expanded group {0}", e.GroupPosition));
        dialogBuilder.Create().Show();
    }

    private void ListView_GroupClick(object sender, ExpandableListView.GroupClickEventArgs e)
    {
        var dialogBuilder = new AlertDialog.Builder(this);
        dialogBuilder.SetTitle(Resource.String.group_title);
        dialogBuilder.SetMessage(string.Format("Clicked group {0}", e.GroupPosition));
        dialogBuilder.Create().Show();
    }

问题:

当我单击列表中的组标题时,会触发 click 事件,但不会触发 expand 事件。单击左侧的小扩展克拉或仅单击列表项的中间都没关系。

询盘:

是否有任何方法可以设置视图,以便单击克拉仅触发展开事件(而不是单击事件),反之亦然,而是单击列表项的中间?如果单击克拉或列表项的中间是一回事,(如何)我怎样才能让展开和单击处理程序触发?还是我只是选择一个而不是另一个?

【问题讨论】:

    标签: android xamarin.android event-handling expandablelistview


    【解决方案1】:

    有没有办法设置视图,以便单击克拉仅触发展开事件(而不是单击事件),反之亦然,而不是单击列表项的中间?

    首先您可以为组头创建自己的指标:

    <ExpandableListView
        android:id="@+id/myExpandableListview"
        android:groupIndicator="@null"
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    

    并创建您的标题布局,例如:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
      <ImageView
          android:layout_height="50dp"
          android:layout_width="50dp"
          android:id="@+id/indicator"
          android:src="@drawable/downicon" />
      <TextView
          android:id="@+id/DataHeader"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_gravity="center"
          android:textAppearance="?android:attr/textAppearanceLarge"
          android:text="DataHeader"
          android:layout_margin="2dp"
          android:textStyle="bold"
          android:paddingStart="50dp"
          android:paddingLeft="50dp" />
    </LinearLayout>
    

    然后创建您的ExpandableDataAdapter,例如:

    public class ExpandableDataAdapter : BaseExpandableListAdapter
    {
        private readonly Activity Context;
    
        private ExpandableListView _listview;
    
        public ExpandableDataAdapter(Activity newContext, List<Data> newList, ExpandableListView listview) : base()
        {
            Context = newContext;
            DataList = newList;
            _listview = listview;
        }
    
        protected List<Data> DataList { get; set; }
    
        public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
        {
            MyViewHolder holder;
            var view = convertView;
    
            if (view != null)
                holder = view.Tag as MyViewHolder;
    
            holder = new MyViewHolder();
            view = Context.LayoutInflater.Inflate(Resource.Layout.ListGroup, null);
            holder.Header = view.FindViewById<TextView>(Resource.Id.DataHeader);
            holder.Indicator = view.FindViewById<ImageView>(Resource.Id.indicator);
            view.Tag = holder;
    
            holder.Header.Text = ((char)(65 + groupPosition)).ToString();
    
            holder.Indicator.Click += (sender, e) =>
            {
                if (!isExpanded)
                {
                    _listview.ExpandGroup(groupPosition);
                }
                else
                {
                    _listview.CollapseGroup(groupPosition);
                }
            };
    
            return view;
        }
    
        private class MyViewHolder : Java.Lang.Object
        {
            public TextView Header { get; set; }
            public ImageView Indicator { get; set; }
        }
    
        //...And more other code here
    }
    

    最后像这样使用这个适配器:

    var adapter = new ExpandableDataAdapter(this, Data.SampleData(), listView);
    

    现在您可以单击每个标题项的指示图展开列表:

    【讨论】:

      猜你喜欢
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      相关资源
      最近更新 更多