我正在尝试让这个TabHost工作。当我将TabHost添加到xml布局并运行程序时,我可以看到每个选项卡的不同内容堆叠在一起。这告诉我布局工作正常。然后,我将规范代码添加到活动中,然后在导航到此屏幕时关闭模拟器上的程序
这是我的XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tWelcome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/bNewTask"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add Task" />
<TabHost
android:id="@+id/myTabs"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TabWidget
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</ListView>
</LinearLayout>
<LinearLayout
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/tTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
现在是我的活动代码:(唯一重要的部分…)
welcomeName = (TextView) findViewById(R.id.tWelcome);
Test = (TextView) findViewById(R.id.tTest);
newTask = (Button) findViewById(R.id.bNewTask);
myTask = (ListView) findViewById(R.id.listView);
TabHost th = (TabHost) findViewById(R.id.myTabs);
welcomeName.setText("Welcome " + ToDoActivity.myUser.getName() + "!");
th.setup();
TabSpec specs = th.newTabSpec("tag1");
specs.setContent(R.id.tab1);
specs.setIndicator("All");
th.addTab(specs);
specs = th.newTabSpec("tag2");
specs.setContent(R.id.tab2);
specs.setIndicator("Personal");
th.addTab(specs);
这是用于选项卡的Android教程页面:http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
它提供了关于选项卡的信息和要求,并提供了许多示例代码。您应该能够从那里复制粘贴,然后进行编辑。
具体来说,我会将所有Tab元素的ID更改为建议的Android ID:
android:id/tabhost
android:id/tabs
android:id/tabcontent
脑海中浮现出几种可能性。
如果您正在使用TabActivity(这不是一个要求,但会使事情变得更容易),那么tabhost必须具有android:id="@android:id/tabhost"
作为id。
我还看到它说tabhost必须是根节点。我无法确认使用android文档。我可能会在所有其他途径都失败后做出这种改变(或者有人证实这是真的)。
如果您使用的是TabActivity,则不需要通过id引用tabhost,也不需要使用setup()方法。我看到你在使用setup()方法,但我可以;t判断您的活动是否为TabActivity。如果是的话,也许这就是你的问题所在。
以下是我用于选项卡布局设置的方法,它对我很有效。注意,这假设tabhost是布局的根节点,它有android:id/tabhost
作为id,它是一个TabActivity。
选项卡主机代码:
public class Tabs extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
spec = tabHost.newTabSpec("tag1").setIndicator("All").setContent(R.id.tab1);
tabHost.addTab(spec);
spec = tabHost.newTabSpec("tag2").setIndicator("Personal").setContent(R.id.tab2);
tabHost.addTab(spec);
}
}
希望这能有所帮助!(如果答案能解决你的问题,一定要点击复选标记接受答案)。