Add ExpandableListView Under TabHost

假如想象 提交于 2020-01-24 00:33:07

问题


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

Tab.axml

<?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>

Today.cs

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

}

The tabs create just fine but if I click on the Today tab bringing up the ExpandableListViewActivity, nothing shows up. I changed the LinearLayout in the Tab.axml to Relative and then the ExpandableListView shows up but the first item is on top of the today tab and attempting to expand the item crashes the app.

App when Tab.axml has LinearLayout

App when Tab.axml has RelativeLayout


回答1:


Got it working. The solution is to leave the Tab.axml with a relative layout and specify the FrameLayout is below the TabWidget.

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


来源:https://stackoverflow.com/questions/9168985/add-expandablelistview-under-tabhost

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!