0

我正在尝试在同一个活动中制作一个标签式界面。这是我的 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>

虚拟.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.tab2R.layout.dummyor R.id.ratingBar1,它会抛出一个空指针异常。

我打算在选项卡中显示 dummy.xml。

4

1 回答 1

6

R.id.tab2有效和R.layout.dummy无效的原因是它R.id.tab2是内容视图的一部分,Activity因为它在布局中定义为setContentView.

您不能在需要view- id 的地方使用layout-id,这就是为什么不起作用。当使用as 不是内容的一部分时,您不能指望它能够工作,并且活动如何知道从哪里获得该视图?请记住,您可以使用 id 有几种不同的布局。R.layout.dummyR.id.ratingBar1ActivityratingBar1

您需要做的是将您的虚拟布局放置在@android:id/tabcontent. 你可以只用一个<include>元素来做到这一点。否则,您需要自己膨胀布局并将结果View用作setContent.

于 2012-05-30T17:53:32.420 回答