Xamarin.android Android和BaseExpandableListAdapter的Mono示例

Xamarin.android Android和BaseExpandableListAdapter的Mono示例,xamarin.android,Xamarin.android,有没有人举过Android版Mono上使用BaseExpandableListAdapter的例子。我正试图为我的一个观点实现这一点,但在寻找彻底的东西时遇到了问题。有谁能举例说明他们是如何使用Mono for Android实现这一点的吗?这是一个使用自定义可扩展列表适配器的外观粗糙但功能强大的例子。您可以将数据源视为一个列表列表,因为每个项目都将展开以显示其下方的项目列表。为了表示这一点,我们将使用以下简单模型: public class Group : Java.Lang.Object {

有没有人举过Android版Mono上使用BaseExpandableListAdapter的例子。我正试图为我的一个观点实现这一点,但在寻找彻底的东西时遇到了问题。有谁能举例说明他们是如何使用Mono for Android实现这一点的吗?

这是一个使用自定义可扩展列表适配器的外观粗糙但功能强大的例子。您可以将数据源视为一个列表列表,因为每个项目都将展开以显示其下方的项目列表。为了表示这一点,我们将使用以下简单模型:

public class Group : Java.Lang.Object
{
    public string Name { get; set; }
    public IList<string> Items { get; set; }
}
公共类组:Java.Lang.Object
{
公共字符串名称{get;set;}
公共IList项{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; }
    }
}
公共类MyAdapter:BaseExpandableListAdapter
{
私有只读上下文\u上下文;
私有只读IList_组;
公共MyAdapter(上下文、IList组)
{
_上下文=上下文;
_组=组;
}
public override Java.Lang.Object GetChild(int-groupPosition,int-childPosition)
{
返回_组[groupPosition]。项[childPosition];
}
公共覆盖长GetChildId(int-groupPosition,int-childPosition)
{
返回(groupPosition*_groups.Count)+childPosition;
}
公共覆盖视图GetChildView(int-groupPosition、int-childPosition、bool-isLastChild、视图转换视图、视图组父视图)
{
var视图=(TextView)(convertView??新的TextView(_context));
view.Text=_组[groupPosition]。项[childPosition];
返回视图;
}
公共覆盖int GetChildrenCount(int groupPosition)
{
返回_组[groupPosition].Items.Count;
}
public override Java.Lang.Object GetGroup(int-groupPosition)
{
返回组[groupPosition];
}
公共覆盖长GetGroupId(int-groupPosition)
{
返回组位置;
}
公共覆盖视图GetGroupView(int-groupPosition、bool-isExpanded、视图转换视图、视图组父级)
{
var视图=(TextView)(convertView??新的TextView(_context));
view.Text=\u组[groupPosition].Name;
返回视图;
}
公共覆盖bool ischildselect(int-groupPosition,int-childPosition)
{
返回true;
}
公共覆盖int-GroupCount
{
获取{return\u groups.Count;}
}
公共覆盖布尔表ID
{
获取{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);
    }
}
[活动(Label=“ExpandableListDemo”,MainLauncher=true,Icon=“@drawable/Icon”)]
公共类MyExpandableListActivity:ExpandableListActivity
{
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
变量组=新列表
{
新组
{
Name=“第1组”,
项目=新列表{“项目1.1”、“项目1.2”、“项目1.3”}
},
新组
{
Name=“第2组”,
项目=新列表{“项目2.1”、“项目2.2”、“项目2.3”}
}
};
var adapter=新的MyAdapter(此,组);
SetListAdapter(适配器);
}
}

这正是我需要的。我对适配器的使用非常熟悉,但您的方法比我试图完成的复杂步骤更清晰,我试图通过一个标准活动来完成所有这些。谢谢你的帮助,格雷格!