当代码转到“addSpec()”时,它会抛出nullPointerException。我检查了Logcat中的tabHost和Host.Spec。它们都不是空的!我将把打印结果添加到这个问题的最后。
这是我的java代码。
public class Cao extends Activity {
ScrollView menu_scroll;
TabHost menu_host;
TabWidget menu_tags;
int[] contents;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testtab);
menu_host = (TabHost) findViewById(R.id.tabhost);
Log.e("tabhost", (menu_host == null) + "");
menu_tags = (TabWidget) findViewById(android.R.id.tabs);
contents = new int[] { R.id.b1, R.id.b2 };
int count = 6;
for (int i = 0; i < count; i++) {
TabSpec spec = menu_host.newTabSpec(i + "");
spec.setIndicator("no " + i);
Log.e("spec", (spec == null) + "");
spec.setContent(R.id.b1); **// the problem occurs at this line**
menu_host.addTab(spec);
}
}
}
我的xml代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TabHost
android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="50dp"
android:orientation="vertical" >
<HorizontalScrollView
android:id="@+id/menu_scroll"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:scrollbars="none" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</TabWidget>
</HorizontalScrollView>
</LinearLayout>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<Button
android:id="@+id/b1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1" />
<Button
android:id="@+id/b2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2" />
</FrameLayout>
</TabHost>
</LinearLayout>
另外还有logcat打印输出
tabhost(490): false
spec(490): false
E/AndroidRuntime(490): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(490): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tim.wirelessorder/com.tim.wirelessorder.ui.Cao}: java.lang.NullPointerException
E/AndroidRuntime(490): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
E/AndroidRuntime(490): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E/AndroidRuntime(490): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime(490): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
E/AndroidRuntime(490): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(490): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(490): at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime(490): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(490): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(490): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(490): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(490): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(490): Caused by: java.lang.NullPointerException
E/AndroidRuntime(490): at android.widget.TabHost$ViewIdContentStrategy.<init>(TabHost.java:583)
E/AndroidRuntime(490): at android.widget.TabHost$ViewIdContentStrategy.<init>(TabHost.java:578)
E/AndroidRuntime(490): at android.widget.TabHost$TabSpec.setContent(TabHost.java:435)
E/AndroidRuntime(490): at com.tim.wirelessorder.ui.Cao.onCreate(Cao.java:38)
E/AndroidRuntime(490): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(490): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
答案 0 :(得分:1)
您需要扩展TabActivity而不是简单的活动 尝试
public class Cao extends TabActivity
intead of
public class Cao extends Activity
并更改此
menu_host = (TabHost) findViewById(R.id.tabhost);
要 menu_host = getTabHost(); 和
android:id="@+id/tabhost"
到
android:id="@android:id/tabhost"
答案 1 :(得分:1)
//将您的tabhost ID更改为
<TabHost
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
//你的活动扩展了TabActivity,如下所示
public class HelloTabWidget extends TabActivity {
//在你的onCreate中执行此操作
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
答案 2 :(得分:0)
我需要的只是改变我在.xml中声明TabHost
的ID的方式。我使用"@+id/tabhost"
而不是"@android:id/tabhost"
。然后,在代码中分配我的TabHost
时,我调用了findViewById(android.R.id.tabhost)
。无论出于何种原因,这都解决了我的问题。