Я пытаюсь сделать этот пример http://techdroid.kbeanie.com/2010/09/expandablelistview-on-android.html, но с использованием monodroid моя проблема в том, что я использовал для программирования в java, но я hava-проблемы для вызова списка children в методе BaseExpandableListAdapter Abstracs, потому что мне нужно, например, поместите groupPosition и childPosition из списка, так как я могу это решить?ExpandableListView Mono для Android
ответ
Проблема с созданием ExpandableListAdapter
заключается в том, что методы требуют возврата типов Java.Lnag.Object.
. Я не смог заставить ваш пример Java работать.
Но вот пример использования ExpandableListView
, не определяя ваш собственный ExpandableListAdapter
, а просто используя класс SimpleExpandableListAdapter
.
Этот пример позволит вам использовать ExpandableListView
, однако он не даст вам дополнительной гибкости, которая поставляется с BaseExpandableListAdapter
.
using System;
using System.Collections.Generic;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
namespace Scratch.ExpandableListActivity
{
[Activity (Label = "Scratch.ExpandableListActivity", MainLauncher = true)]
public class Activity1 : Android.App.ExpandableListActivity
{
IExpandableListAdapter mAdapter;
const string Name = "NAME";
const string IsEven = "IS_EVEN";
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
using (var groupData = new JavaList<IDictionary<string, object>>())
using (var childData = new JavaList<IList<IDictionary<string, object>>>()) {
for (int i = 0; i < 20; i++) {
using (var curGroupMap = new JavaDictionary<string, object>()) {
groupData.Add(curGroupMap);
curGroupMap.Add(Name, "Group " + i);
curGroupMap.Add(IsEven, (i % 2 == 0) ? "This group is even" : "This group is odd");
using (var children = new JavaList<IDictionary<string, object>>()) {
for (int j = 0; j < 15; j++) {
using (var curChildMap = new JavaDictionary<string, object>()) {
children.Add(curChildMap);
curChildMap.Add(Name, "Child " + j);
curChildMap.Add(IsEven, (j % 2 == 0) ? "This child is even" : "This child is odd");
}
}
childData.Add(children);
}
}
}
// Set up our adapter
mAdapter = new SimpleExpandableListAdapter (
this,
groupData,
Android.Resource.Layout.SimpleExpandableListItem1,
new string[] { Name, IsEven},
new int[] { Android.Resource.Id.Text1, Android.Resource.Id.Text2 },
childData,
Android.Resource.Layout.SimpleExpandableListItem2,
new string[] { Name, IsEven },
new int[] { Android.Resource.Id.Text1, Android.Resource.Id.Text2 }
);
SetListAdapter(mAdapter);
}
}
}
}
Как бы вы использовали это во фрагменте? – MikeOscarEcho
При использовании Mono для Android до 4.2 (например, 4.0.6) версии, это должно быть так:
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.Collections.Generic;
namespace MonoAndroidApplication2
{
[Activity(Label = "Expandable List Activity", MainLauncher = true)]
public class Activity1 : ExpandableListActivity
{
IExpandableListAdapter mAdapter;
String NAME = "NAME";
String IS_EVEN = "IS_EVEN";
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
List< IDictionary <String , object >> groupData = new List< IDictionary < string , object >>();
List< IList<IDictionary< String, object>>> childData = new List < IList < IDictionary < string, object>>>();
for (int i = 0; i < 20; i++)
{
Dictionary< String, object > curGroupMap = new Dictionary < string , object >();
groupData.Add(curGroupMap);
curGroupMap.Add(NAME, "Group " + i);
curGroupMap.Add(IS_EVEN, (i % 2 == 0) ? "This group is even" : "This group is odd");
List< IDictionary <String , object >> children = new List< IDictionary < string , object >>();
for (int j = 0; j < 15; j++)
{
Dictionary< String, object > curChildMap = new Dictionary < string , object >();
children.Add(curChildMap);
curChildMap.Add(NAME, "Child " + j);
curChildMap.Add(IS_EVEN, (j % 2 == 0) ? "This child is even" : "This child is odd");
}
childData.Add(children);
}
// Set up our adapter
mAdapter = new SimpleExpandableListAdapter (
this,
groupData,
Android.Resource.Layout.SimpleExpandableListItem1,
new String[] { NAME, IS_EVEN },
new int[] { Android.Resource.Id.Text1, Android.Resource.Id.Text2 },
childData,
Android. Resource. Layout.SimpleExpandableListItem2,
new String[] { NAME, IS_EVEN },
new int[] { Android.Resource .Id.Text1, Android.Resource.Id.Text2 }
);
SetListAdapter(mAdapter);
}
}
}
Все благодарности об этом коде автору, lanks.
Это может быть так; ответ «обновленный для 4.2.1» также должен работать на 4.0.6, и поэтому он должен быть предпочтительнее даже в 4.0.6, чтобы свести к минимуму изменения между 4.0.6 и 4.2.1. – jonp
Я не думаю, что я вполне понимаю вопрос. Как вы это сделаете в java-коде? –