在布局中定义TabHost是setContent期间给予的NullPointerException [英] TabHost defined in layout is giving NullPointerException during setContent

查看:214
本文介绍了在布局中定义TabHost是setContent期间给予的NullPointerException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图修改 Tabs1.java 从Android API演示16(和一个API 16模拟器中运行),使用标准的活动,而不是去precated TabActivity 类。我创建了一个新的布局文件,并修改了code。

我试图用这个办法,而不是操作栏的原因是标签并不适用于整个屏幕,只有更小的子视图。

我执行的code,我得到一个 NullPointerException异常在Android里面的 setContent 方法执行以下行时:

tabHost.newTabSpec(TAB1)。setIndicator(TAB1)。setContent(R.id.view1)

任何想法,为什么这可能发生?全堆栈跟踪后,code和布局。

Tabs1VanillaActivity.java

 公共类TABS1延伸活动{    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.tabs1);
        TabHost tabHost =(TabHost)findViewById(R.id.tabhost);        tabHost.addTab(tabHost.newTabSpec(TAB1)
                .setIndicator(TAB1)
                .setContent(R.id.view1));
        tabHost.addTab(tabHost.newTabSpec(TAB3)
                .setIndicator(TAB2)
                .setContent(R.id.view2));
        tabHost.addTab(tabHost.newTabSpec(TAB3)
                .setIndicator(TAB3)
                .setContent(R.id.view3));
    }
}

tabs1.xml:
    
    

 <的TextView
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:文字=TextView的去这里!
        工具:忽略=硬codedText/>    < TabHost
        机器人:ID =@ + ID / tabhost
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT>        <的LinearLayout
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =WRAP_CONTENT
            机器人:方向=垂直>            < TabWidget
                机器人:ID =@机器人:ID /标签
                机器人:layout_width =FILL_PARENT
                机器人:layout_height =WRAP_CONTENT/>            <的FrameLayout
                的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
                机器人:ID =@机器人:ID / tabcontent
                机器人:layout_width =match_parent
                机器人:layout_height =match_parent>                <的TextView
                    机器人:ID =@ + ID /厂景
                    机器人:layout_width =match_parent
                    机器人:layout_height =match_parent
                    机器人:背景=@绘制/蓝
                    机器人:文字=@字符串/ tabs_1_tab_1/>                <的TextView
                    机器人:ID =@ + ID /视图2
                    机器人:layout_width =match_parent
                    机器人:layout_height =match_parent
                    机器人:背景=@绘制/红
                    机器人:文字=@字符串/ tabs_1_tab_2/>                <的TextView
                    机器人:ID =@ + ID / VIEW3
                    机器人:layout_width =match_parent
                    机器人:layout_height =match_parent
                    机器人:背景=@绘制/绿
                    机器人:文字=@字符串/ tabs_1_tab_3/>
            < /&的FrameLayout GT;
        < / LinearLayout中>
    < / TabHost>< / LinearLayout中>

堆栈跟踪:

  09-18 16:18:22.968:E / AndroidRuntime(1191):致命异常:主要
09-18 16:18:22.968:E / AndroidRuntime(1191):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.android.apis / com.example.android.apis.view.Tabs1}:JAVA .lang.NullPointerException
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.app.ActivityThread.access $ 600(ActivityThread.java:123)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.os.Handler.dispatchMessage(Handler.java:99)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.os.Looper.loop(Looper.java:137)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.app.ActivityThread.main(ActivityThread.java:4424)
09-18 16:18:22.968:E / AndroidRuntime(1191):在java.lang.reflect.Method.invokeNative(本机方法)
09-18 16:18:22.968:E / AndroidRuntime(1191):在java.lang.reflect.Method.invoke(Method.java:511)
09-18 16:18:22.968:E / AndroidRuntime(1191):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
09-18 16:18:22.968:E / AndroidRuntime(1191):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-18 16:18:22.968:E / AndroidRuntime(1191):在dalvik.system.NativeStart.main(本机方法)
09-18 16:18:22.968:E / AndroidRuntime(1191):因:显示java.lang.NullPointerException
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.widget.TabHost $ ViewIdContentStrategy<&初始化GT;(TabHost.java:617)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.widget.TabHost $ ViewIdContentStrategy<&初始化GT;(TabHost.java:612)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.widget.TabHost $ TabSpec.setContent(TabHost.java:461)
09-18 16:18:22.968:E / AndroidRuntime(1191):在com.example.android.apis.view.Tabs1.onCreate(Tabs1.java:42)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.app.Activity.performCreate(Activity.java:4465)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
09-18 16:18:22.968:E / AndroidRuntime(1191):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
09-18 16:18:22.968:E / AndroidRuntime(1191):11 ...更多


解决方案

您必须调用 tabHost.setup()之前尝试添加标签。

<一个href=\"http://developer.android.com/reference/android/widget/TabHost.html#setup\">http://developer.android.com/reference/android/widget/TabHost.html#setup()

I'm trying to modify Tabs1.java from the Android API Demos 16 (and run on an API 16 emulator) to use a standard Activity rather than the deprecated TabActivity class. I've created a new layout file and modified the code.

The reason I'm trying to use this approach as opposed to the action bar is that the tabs don't apply to the entire screen, only a smaller sub-view.

When I execute the code, I'm getting a NullPointerException inside the Android setContent method when executing the following line:

tabHost.newTabSpec("tab1").setIndicator("tab1").setContent(R.id.view1)

Any ideas why this might be happening? Full stack trace is after code and layout.

Tabs1VanillaActivity.java:

public class Tabs1 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tabs1);
        TabHost tabHost = (TabHost) findViewById(R.id.tabhost);

        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("tab1")
                .setContent(R.id.view1));
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("tab2")
                .setContent(R.id.view2));
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("tab3")
                .setContent(R.id.view3));
    }
}

tabs1.xml:

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView goes here!"
        tools:ignore="HardcodedText" />

    <TabHost
        android:id="@+id/tabhost"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />

            <FrameLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@android:id/tabcontent"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <TextView
                    android:id="@+id/view1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/blue"
                    android:text="@string/tabs_1_tab_1" />

                <TextView
                    android:id="@+id/view2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/red"
                    android:text="@string/tabs_1_tab_2" />

                <TextView
                    android:id="@+id/view3"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/green"
                    android:text="@string/tabs_1_tab_3" />
            </FrameLayout>
        </LinearLayout>
    </TabHost>

</LinearLayout>

Stack Trace:

09-18 16:18:22.968: E/AndroidRuntime(1191): FATAL EXCEPTION: main
09-18 16:18:22.968: E/AndroidRuntime(1191): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.apis/com.example.android.apis.view.Tabs1}: java.lang.NullPointerException
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.os.Looper.loop(Looper.java:137)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.app.ActivityThread.main(ActivityThread.java:4424)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at java.lang.reflect.Method.invokeNative(Native Method)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at java.lang.reflect.Method.invoke(Method.java:511)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at dalvik.system.NativeStart.main(Native Method)
09-18 16:18:22.968: E/AndroidRuntime(1191): Caused by: java.lang.NullPointerException
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.widget.TabHost$ViewIdContentStrategy.<init>(TabHost.java:617)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.widget.TabHost$ViewIdContentStrategy.<init>(TabHost.java:612)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.widget.TabHost$TabSpec.setContent(TabHost.java:461)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at com.example.android.apis.view.Tabs1.onCreate(Tabs1.java:42)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.app.Activity.performCreate(Activity.java:4465)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
09-18 16:18:22.968: E/AndroidRuntime(1191):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
09-18 16:18:22.968: E/AndroidRuntime(1191):     ... 11 more

解决方案

You must call tabHost.setup() before attempting to add tabs.

http://developer.android.com/reference/android/widget/TabHost.html#setup()

这篇关于在布局中定义TabHost是setContent期间给予的NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆