问题
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