3

有没有人有将 BaseExpandableListAdapter 与 Mono for Android 一起使用的示例。我正在尝试根据我的一种观点来实现这一点,但是在找到彻底的东西时遇到了问题。谁能提供任何关于他们如何使用 Mono for Android 的示例?

4

1 回答 1

2

这是使用自定义可扩展列表适配器的一个公认的粗略但实用的示例。您可以将数据源视为列表列表,因为每个项目都会展开以显示其下方的项目列表。为了表示这一点,我们将使用这个简单的模型:

public class Group : Java.Lang.Object
{
    public string Name { get; set; }
    public IList<string> Items { get; set; }
}

使用该模型,您可以创建一个继承自 BaseExpandableListAdapter 并实现所有必需方法/属性的类:

public class MyAdapter : BaseExpandableListAdapter
{
    private readonly Context _context;
    private readonly IList<Group> _groups;

    public MyAdapter(Context context, IList<Group> groups)
    {
        _context = context;
        _groups = groups;
    }

    public override Java.Lang.Object GetChild(int groupPosition, int childPosition)
    {
        return _groups[groupPosition].Items[childPosition];
    }

    public override long GetChildId(int groupPosition, int childPosition)
    {
        return (groupPosition * _groups.Count) + childPosition;
    }

    public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
    {
        var view = (TextView)(convertView ?? new TextView(_context));

        view.Text = _groups[groupPosition].Items[childPosition];

        return view;
    }

    public override int GetChildrenCount(int groupPosition)
    {
        return _groups[groupPosition].Items.Count;
    }

    public override Java.Lang.Object GetGroup(int groupPosition)
    {
        return _groups[groupPosition];
    }

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

    public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
    {
        var view = (TextView)(convertView ?? new TextView(_context));

        view.Text = _groups[groupPosition].Name;

        return view;
    }

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

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

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

适配器的构造函数接受一个组列表,并使用它来实现请求组、项目等的方法。为了简单起见,对于每个视图,我只是呈现一个 TextView,但您可以创建/为项目膨胀您想要的任何视图。

为了演示这一点,这里有一个示例活动,它将加载一个包含一些数据的可扩展列表:

[Activity(Label = "ExpandableListDemo", MainLauncher = true, Icon = "@drawable/icon")]
public class MyExpandableListActivity : ExpandableListActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        var groups = new List<Group>
                         {
                             new Group
                                 {
                                     Name = "Group 1",
                                     Items = new List<string> { "Item 1.1", "Item 1.2", "Item 1.3" }
                                 },
                            new Group
                                 {
                                     Name = "Group 2",
                                     Items = new List<string> { "Item 2.1", "Item 2.2", "Item 2.3" }
                                 }
                         };

        var adapter = new MyAdapter(this, groups);

        SetListAdapter(adapter);
    }
}
于 2012-05-08T19:36:20.150 回答