在选项卡中显示任何内容时出现NullPointerException

时间:2012-05-30 17:48:03

标签: android android-tabs

我正在尝试在同一个活动中创建一个标签界面。 这是我的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.dummyR.id.ratingBar1,则会抛出nullpointerexception。

我打算在标签中显示dummy.xml。

1 个答案:

答案 0 :(得分:6)

R.id.tab2有效且R.layout.dummy没有的原因是R.id.tab2Activity内容视图的一部分,因为它是在布局设置中定义的setContentView

您不能使用 layout-id ,而 view-id 是预期的,这就是为什么R.layout.dummy不起作用的原因。在使用R.id.ratingBar1时,您不能指望它能够正常工作,因为它不是Activity内容的一部分,活动将如何知道从哪里获取该视图?请记住,您可以使用ID ratingBar1来使用多种不同的布局。

您需要做的是将虚拟布局放在@android:id/tabcontent中。您只需使用<include>元素即可完成此操作。否则,您需要自己对布局进行膨胀,并使用生成的View作为setContent的参数。