java.lang.Исключение NullPointerException в android.widget.TabHost.dispatchWindowFocusChanged(TabHost.java:298)

#android #android-layout

#Android #android-макет

Вопрос:

Многие пользователи моей программы сообщают о «принудительном закрытии» с той же ошибкой, и я не могу воспроизвести ошибку, поэтому ее трудно отлаживать!

Кажется, это связано с TabHost (у меня их два в моем приложении)

На данный момент я попытался расширить TabHost, переопределив dispatchWindowFocusChanged() и проверив, возвращает ли getCurrentView () значение null… если это так, я устанавливаю CURRENTTAB () в последний известный индекс вкладки. Но я не знаю, поможет ли это…

Кто-нибудь имеет какое-либо представление об этом отчете?

 java.lang.NullPointerException
at android.widget.TabHost.dispatchWindowFocusChanged(TabHost.java:298)
at android.widget.TabHost.dispatchWindowFocusChanged(TabHost.java:302)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:662)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:662)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:662)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:662)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1946)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
  

И вот макет TabHost :

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  android:id="@ id/main_layout"
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical">
  <TabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_weight="1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
      android:id="@ id/airport_linear"
      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"  />
    </LinearLayout>
  </TabHost>
</LinearLayout>
  

Комментарии:

1. не могли бы вы опубликовать файл Java с исходным кодом

2. ошибка nullpointer, поэтому вам нужно проверить свой код tabhost, где вы пытаетесь получить доступ к объекту переменной r, который не инициализирован. Спасибо.

Ответ №1:

Вызовите setup() перед добавлением вкладок, если загружаете TabHost с помощью findViewById(). Однако: вам не нужно вызывать setup() после getTabHost() в TabActivity.
http://developer.android.com/reference/android/widget/TabHost.html#setup ()

Ответ №2:

попробуйте расширить TabActivity так же, как

 public class TabsExampleActivity extends TabActivity{
   @Override 
   public void onCreate(Bundle savedInstanceState){
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main_tabhost_layout);

          TabHost tabHost = getTabHost();
          ...
   }
}
  

Я надеюсь, что это могло бы помочь

Ответ №3:

Столкнулся с этим сегодня на 2.2

убедитесь, что вы делаете

 mTabHost = (TabHost) findViewById(R.id.tabhost);
mTabHost.setup();
  

это исправлено.