2012-05-08 13 views
3

Android用にBaseExpandableListAdapterとMonoを使用する例はありますか?私は私の意見の1つとしてこれを実装しようとしていますが、徹底的に何かを見つけることに問題があります。 Android用のMonoでどのように動作しているかの例は誰でも提供できますか?Android用モノラルとBaseExpandableListAdapterの例

答えて

2

カスタマイズ可能な拡張可能なリストアダプターを使用することは、確かに見た目が粗いですが機能的な例です。各項目はその下にある項目のリストを表示するように展開されるので、データソースをリストのリストと考えることができます。あなたがBaseExpandableListAdapterから継承し、必要なすべてのメソッド/プロパティを実装するクラスを作成することができ、そのモデルを使用して

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

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; } 
    } 
} 

コンストラクタということを表現するために、我々はこの単純なモデルを使用しますアダプターはグループのリストを取り込み、それを使ってグループ、アイテムなどを求めるメソッドを実装します。単純に、各ビューについては、ただ1つの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); 
    } 
} 
+0

を:

は、この動作を実証するために、ここでいくつかのデータで拡張可能なリストをロードするサンプルの活動です。私はアダプターを持っていたものに近づいていましたが、あなたのアプローチは、私が通過しようとしていた複雑なステップよりもきれいで、標準的なアクティビティを通してすべてをやろうとしていました。助けてくれてありがとう、グレッグ! –

関連する問題