我遇到ExpandableListAdapter问题。我无法获得扩展列表。似乎所有这些子方法都存在问题:
Java.Lang.Object GetChild(int groupPosition, int childPosition)
public override long GetChildId(int groupPosition, int childPosition)
public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
public override int GetChildrenCount(int groupPosition)
永远不会调用这些方法。我似乎无法弄清楚原因。这是我的代码:
ExpandableTaskListAdapter.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
namespace MyProject
{
public class ExpandableTaskListAdapter : BaseExpandableListAdapter
{
private readonly Context context;
private readonly List<string> headers;
private readonly Dictionary<string, List<string>> listChildData;
private readonly LayoutInflater inflater;
private readonly bool[] expanded;
public ExpandableTaskListAdapter(Context context, List<string> headers, Dictionary<string, List<string>> listChildData, LayoutInflater inflater)
{
this.context = context;
this.headers = headers;
this.listChildData = listChildData;
this.inflater = inflater;
expanded = new bool[headers.Count];
}
public override void OnGroupCollapsed(int groupPosition)
{
expanded[groupPosition] = !expanded[groupPosition];
base.OnGroupCollapsed(groupPosition);
}
public override void OnGroupExpanded(int groupPosition)
{
expanded[groupPosition] = !expanded[groupPosition];
base.OnGroupExpanded(groupPosition);
}
public override Java.Lang.Object GetChild(int groupPosition, int childPosition)
{
return listChildData[headers[groupPosition]][childPosition];
}
public override long GetChildId(int groupPosition, int childPosition)
{
return childPosition;
}
public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
{
string childText = (string)GetChild(groupPosition, childPosition);
convertView = inflater.Inflate(Resource.Layout.task_child, null);
TextView listChild = convertView.FindViewById<TextView>(Resource.Id.label);
listChild.Text = childText;
return convertView;
}
public override int GetChildrenCount(int groupPosition)
{
return listChildData[headers[groupPosition]].Count;
}
public override Java.Lang.Object GetGroup(int groupPosition)
{
return headers[groupPosition];
}
public override long GetGroupId(int groupPosition)
{
return groupPosition;
}
public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
{
string headerTitle = (string)GetGroup(groupPosition);
convertView = inflater.Inflate(Resource.Layout.task_child, null);
TextView header = convertView.FindViewById<TextView>(Resource.Id.label);
header.Text = headerTitle;
convertView.FindViewById<LinearLayout>(Resource.Id.main_layout).Click += (sender, e) =>
{
if (expanded[groupPosition])
OnGroupCollapsed(groupPosition);
else
OnGroupExpanded(groupPosition);
};
return convertView;
}
public override int GroupCount
{
get { return headers.Count; }
}
public override bool HasStableIds
{
get { return true; }
}
public override bool IsChildSelectable(int groupPosition, int childPosition)
{
return true;
}
}
}
task_child.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp">
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_gravity="center_vertical"
android:textSize="17sp"
android:paddingLeft="40dp"/>
<ImageView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="5dp"
android:gravity="center_vertical"
android:layout_gravity="center_vertical"
android:background="@drawable/ic_delete"/>
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_gravity="center_vertical"/>
</LinearLayout>
在构造函数中放置一个断点,我可以看到我正在传递正确的数据。为什么永远不会调用子方法?
答案 0 :(得分:0)
点击GroupHeaderView
后,ExpandableListView会调用OnGroupExpanded
设置的expanded[position] = true
。
但是,也会调用GroupHeaderView中ListView上的.Click
订阅者,在其中找到expanded[position] == true
并调用OnGroupCollapsed
方法。这导致该集团根本没有扩展,也没有对其子女的请求。
只需删除.Click
方法中的GetGroupView
处理程序,一切都应该正常。
public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
{
string headerTitle = (string)GetGroup(groupPosition);
convertView = inflater.Inflate(Resource.Layout.task_child, null);
TextView header = convertView.FindViewById<TextView>(Resource.Id.label);
header.Text = headerTitle;
return convertView;
}