我正在尝试在同一个活动中创建一个标签界面。 这是我的main.xml
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
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"
/>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<AnalogClock android:id="@+id/tab1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
<Button android:id="@+id/tab2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="A semi-random button"
/>
</FrameLayout>
</LinearLayout>
</TabHost>
dummy.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RatingBar
android:id="@+id/ratingBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
和我的活动:
public class LActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabs=(TabHost)findViewById(R.id.tabhost);
tabs.setup();
tabs.addTab(tabs.newTabSpec("tag1").setIndicator("1").setContent(R.id.tab1));
tabs.addTab(tabs.newTabSpec("tag2").setIndicator("2").setContent(R.id.tab2));
上述代码有效,但如果您将R.id.tab2
更改为R.layout.dummy
或R.id.ratingBar1
,则会抛出nullpointerexception。
我打算在标签中显示dummy.xml。
答案 0 :(得分:6)
R.id.tab2
有效且R.layout.dummy
没有的原因是R.id.tab2
是Activity
内容视图的一部分,因为它是在布局设置中定义的setContentView
。
您不能使用 layout-id ,而 view-id 是预期的,这就是为什么R.layout.dummy
不起作用的原因。在使用R.id.ratingBar1
时,您不能指望它能够正常工作,因为它不是Activity
内容的一部分,活动将如何知道从哪里获取该视图?请记住,您可以使用ID ratingBar1
来使用多种不同的布局。
您需要做的是将虚拟布局放在@android:id/tabcontent
中。您只需使用<include>
元素即可完成此操作。否则,您需要自己对布局进行膨胀,并使用生成的View
作为setContent
的参数。