Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android 2.2中的TabHost nullpointer异常_Android_Nullpointerexception_Android Tabhost_Android 2.2 Froyo_Android Annotations - Fatal编程技术网

android 2.2中的TabHost nullpointer异常

android 2.2中的TabHost nullpointer异常,android,nullpointerexception,android-tabhost,android-2.2-froyo,android-annotations,Android,Nullpointerexception,Android Tabhost,Android 2.2 Froyo,Android Annotations,我正在尝试使用带有4个小部件的tabhost,我已经在android 4.2上测试过了,它工作起来很有魅力,但是在android 2.2上,当我更改选项卡时,它会给我一个nullpointerexception 我知道tabhosts和Android2.1/2.2存在一个已知的问题,但是我似乎无法让它与人们在其他线程上建议的其他修复一起工作 注意:我正在使用 下面是日志: 03-23 10:29:08.869: E/AndroidRuntime(423): FATAL EXCEPTION: ma

我正在尝试使用带有4个小部件的tabhost,我已经在android 4.2上测试过了,它工作起来很有魅力,但是在android 2.2上,当我更改选项卡时,它会给我一个nullpointerexception

我知道tabhosts和Android2.1/2.2存在一个已知的问题,但是我似乎无法让它与人们在其他线程上建议的其他修复一起工作

注意:我正在使用

下面是日志:

03-23 10:29:08.869: E/AndroidRuntime(423): FATAL EXCEPTION: main
03-23 10:29:08.869: E/AndroidRuntime(423): java.lang.NullPointerException
03-23 10:29:08.869: E/AndroidRuntime(423):  at android.widget.TabWidget.focusCurrentTab(TabWidget.java:367)
03-23 10:29:08.869: E/AndroidRuntime(423):  at android.widget.TabHost.setCurrentTab(TabHost.java:320)
03-23 10:29:08.869: E/AndroidRuntime(423):  at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:129)
03-23 10:29:08.869: E/AndroidRuntime(423):  at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:453)
03-23 10:29:08.869: E/AndroidRuntime(423):  at android.view.View.performClick(View.java:2408)
03-23 10:29:08.869: E/AndroidRuntime(423):  at android.view.View$PerformClick.run(View.java:8816)
03-23 10:29:08.869: E/AndroidRuntime(423):  at android.os.Handler.handleCallback(Handler.java:587)
03-23 10:29:08.869: E/AndroidRuntime(423):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-23 10:29:08.869: E/AndroidRuntime(423):  at android.os.Looper.loop(Looper.java:123)
03-23 10:29:08.869: E/AndroidRuntime(423):  at android.app.ActivityThread.main(ActivityThread.java:4627)
03-23 10:29:08.869: E/AndroidRuntime(423):  at java.lang.reflect.Method.invokeNative(Native Method)
03-23 10:29:08.869: E/AndroidRuntime(423):  at java.lang.reflect.Method.invoke(Method.java:521)
03-23 10:29:08.869: E/AndroidRuntime(423):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-23 10:29:08.869: E/AndroidRuntime(423):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-23 10:29:08.869: E/AndroidRuntime(423):  at dalvik.system.NativeStart.main(Native Method)
这是我的密码:

@NoTitle
@EActivity(R.layout.activity_base)
public class BaseActivity extends TabActivity {

    Context mContext;

    @ViewById
    Button btnBaseDeconnecter;

    @ViewById
    TextView txtBaseInfos;

    @AfterViews
    void afterViews() {
        mContext = this;
        TabHost tabHost = getTabHost();

        /* tid1 is firstTabSpec Id. Its used to access outside. */
        TabSpec firstTabSpec = tabHost.newTabSpec("0");
        TabSpec secondTabSpec = tabHost.newTabSpec("1");
        TabSpec thirdTabSpec = tabHost.newTabSpec("2");
        TabSpec fourthTabSpec = tabHost.newTabSpec("3");


        /* TabSpec setIndicator() is used to set name for the tab. */
        /* TabSpec setContent() is used to set content for a particular tab. */
        firstTabSpec.setIndicator(
                prepareTabView(mContext, getResources().getDrawable(R.drawable.enlevement))).setContent(
                new Intent(this, EnlevementActivity_.class));
        secondTabSpec.setIndicator(
                prepareTabView(mContext, getResources().getDrawable(R.drawable.travaux))).setContent(
                new Intent(this, TravauxListActivity_.class));
        thirdTabSpec.setIndicator(
                prepareTabView(mContext, getResources().getDrawable(R.drawable.compte))).setContent(
                new Intent(this, CompteActivity_.class));
        fourthTabSpec.setIndicator(
                prepareTabView(mContext, getResources().getDrawable(R.drawable.contact))).setContent(
                new Intent(this, ContactActivity_.class));
        tabHost.setup();
        /* Add tabSpec to the TabHost to display. */
        tabHost.addTab(firstTabSpec);
        tabHost.addTab(secondTabSpec);
        tabHost.addTab(thirdTabSpec);
        tabHost.addTab(fourthTabSpec);
        tabHost.getTabWidget().setStripEnabled(false);
        tabHost.getTabWidget().setDividerDrawable(R.drawable.empty_divider);


    }
    public static View prepareTabView(Context context, Drawable background) {
        View view = LayoutInflater.from(context).inflate(R.layout.fake_native_tab, null);
        ImageView img = (ImageView)view.findViewById(R.id.fakeNativeTabImageView);
        img.setImageDrawable(background);
        return view;
    }




}

使用backword兼容库意味着在libs文件夹中添加android.support.v4.jar,并尝试使用该库中的同一类,该类将兼容较低版本和较高版本而不是
R.drawable.empty\u分隔符

理由:

查看stacktrace和,在
getChildTabViewAt(int index)
方法中似乎存在一个问题,如果dividerDrawable不为null,它将跳过选项卡栏中的分隔符视图以获得实际的选项卡视图

public View getChildTabViewAt(int index) {
    // If we are using dividers, then instead of tab views at 0, 1, 2, ...
    // we have tab views at 0, 2, 4, ...
    if (mDividerDrawable != null) {
        index *= 2;
    }
    return getChildAt(index);
}

我想,当您为dividerDrawable使用
R.drawable.empty_divider
时会发生什么情况?无法绘制分隔器视图,因此应将其视为
null
。如您所见,这并没有发生,因此这可以解释NullPointerException以及您单击一个选项卡并选择另一个选项卡的奇怪行为。

当您尝试打开特定选项卡时,或者当您尝试打开任何选项卡或四个选项卡时,是否会发生此异常?当应用程序按预期启动时,它会加载到第一个选项卡上,但是如果我单击第二个选项卡,它会将我发送到第三个选项卡,并且当我单击第三个或第四个选项卡时,它会崩溃:它会将我发送到第三个小部件,但会发送到第二个classTry
tabHost.getTabWidget().setDividerDrawable(null)。谢谢,如果你能把它写进一个答案中,这样我就可以给你信任了。android.support.v4.jar库不包含类TabHost或TabHostActivity