2011-12-29 3 views
1

Я пытаюсь сделать этот пример http://techdroid.kbeanie.com/2010/09/expandablelistview-on-android.html, но с использованием monodroid моя проблема в том, что я использовал для программирования в java, но я hava-проблемы для вызова списка children в методе BaseExpandableListAdapter Abstracs, потому что мне нужно, например, поместите groupPosition и childPosition из списка, так как я могу это решить?ExpandableListView Mono для Android

+0

Я не думаю, что я вполне понимаю вопрос. Как вы это сделаете в java-коде? –

ответ

6

Проблема с созданием 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); 
      } 
     } 
    } 
} 
+0

Как бы вы использовали это во фрагменте? – MikeOscarEcho

0

При использовании 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.

+0

Это может быть так; ответ «обновленный для 4.2.1» также должен работать на 4.0.6, и поэтому он должен быть предпочтительнее даже в 4.0.6, чтобы свести к минимуму изменения между 4.0.6 и 4.2.1. – jonp