Android 在TabHost下添加ExpandableListView

Android 在TabHost下添加ExpandableListView,android,xamarin.android,Android,Xamarin.android,Tab.axml public class Boards : TabActivity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Tab); TabHost.TabSpec spec; Intent intent; intent

Tab.axml

public class Boards : TabActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        SetContentView(Resource.Layout.Tab);

        TabHost.TabSpec spec;
        Intent intent;

        intent = new Intent(this, typeof(Today));
        intent.AddFlags(ActivityFlags.NewTask);

        spec = TabHost.NewTabSpec("today");
        spec.SetIndicator("Today");
        spec.SetContent(intent);
        TabHost.AddTab(spec);

        intent = new Intent(this, typeof(Tomorrow));
        intent.AddFlags(ActivityFlags.NewTask);

        spec = TabHost.NewTabSpec("tomorrow");
        spec.SetIndicator("Tomorrow");
        spec.SetContent(intent);
        TabHost.AddTab(spec);

        TabHost.CurrentTab = 1;
    }
}
Today.cs

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@android:id/tabhost"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
   <LinearLayout 
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
      <TabWidget
         android:id="@android:id/tabs"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"></TabWidget>
      <FrameLayout
         android:id="@android:id/tabcontent"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"></FrameLayout>
   </LinearLayout>
</TabHost>
这些选项卡创建得很好,但是如果我单击显示ExpandableListViewActivity的Today选项卡,则不会显示任何内容。我将Tab.axml中的LinearLayout更改为Relative,然后会显示ExpandableListView,但第一个项目位于today选项卡的顶部,尝试展开该项目会使应用程序崩溃

Tab.axml具有LinearLayout时的应用程序

Tab.axml具有RelativeLayout时的应用程序

让它工作起来了。解决方案是将Tab.axml保留为相对布局,并将FrameLayout指定在TabWidget下方

public class Today : ExpandableListActivity
{
   protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

       List<IDictionary<string, object>> parent = new List<IDictionary<string,object>>();
       List<IList<IDictionary<string, object>>> child = new List<IList<IDictionary<string,object>>>();

        External inst = new External();
        var connection = inst.conn();
        var c = connection.CreateCommand();
        c.CommandText = "Select Distinct Store From Calls";
        connection.Open();
        SqliteDataReader dr = c.ExecuteReader();
        if (dr.HasRows)
            while (dr.Read())
            {
                Dictionary<string, object> pItem = new Dictionary<string,object>();
                pItem.Add("Store", dr[0].ToString());
                parent.Add(pItem);
            }
       dr.Close();
       int cnt = parent.Count();

       if (cnt > 0)
       {
           List<IDictionary<string, object>> children = new List<IDictionary<string, object>>();
           foreach(IDictionary<string, object> d in parent)
           {
               c.CommandText = "Select CallNumber From Calls Where Store = '" + d.Values + "'";
               dr = c.ExecuteReader();
               while (dr.Read())
               {
                   Dictionary<string, object> childItem = new Dictionary<string, object>();
                   childItem.Add("Call", dr[0].ToString());
                   children.Add(childItem);
               }
               dr.Close();
           }
           child.Add(children);
       }

       SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(this, parent, Android.Resource.Layout.SimpleExpandableListItem1, new string[] { "Store" }, new int[] { Android.Resource.Id.Text1, Android.Resource.Id.Text2 }, child, Android.Resource.Layout.SimpleExpandableListItem2, new string[] { "Call" }, new int[] { Android.Resource.Id.Text1, Android.Resource.Id.Text2 });
       SetListAdapter(adapter);
    }

}
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@android:id/tabs">
</FrameLayout>