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

arn*_*321 0 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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

和我的活动:

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));
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但是如果你R.id.tab2改为R.layout.dummy或者R.id.ratingBar1,它会抛出一个nullpointerexception.

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

K-b*_*llo 6

R.id.tab2工作原理和R.layout.dummy不工作的原因R.id.tab2Activity内容视图的一部分,因为它是在设置的布局中定义的setContentView.

你不能用一个布局-ID,其中一个view-id的预期,而这就是为什么R.layout.dummy不起作用.并且你不能指望它在使用时不起作用,R.id.ratingBar1因为它不是Activity内容的一部分,活动将如何知道从哪里获得该视图?请记住,使用id可以有几种不同的布局ratingBar1.

你需要做的是将你的虚拟布局放在里面@android:id/tabcontent.你只需要一个<include>元素就可以做到这一点.否则,您需要自己夸大布局并使用结果View作为参数setContent.