android.widget.TabHost.dispatchWindowFocusChanged(TabHost.java:298)中的java.lang.NullPointerException

时间:2011-05-06 09:43:58

标签: android android-layout

我程序的很多用户报告同一错误的“强制关闭”,我无法重现错误,所以很难调试!

它似乎与TabHost有关(我的应用程序中有两个)

现在我试图扩展TabHost覆盖dispatchWindowFocusChanged()并测试getCurrentView()是否返回null ...如果是这样我将setCurrentTab()扩展到最后一个已知的选项卡索引。 但我不知道这是否会起作用......

有人对此报告有任何线索吗?

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>

3 个答案:

答案 0 :(得分:1)

如果使用findViewById()加载TabHost,则在添加选项卡之前调用setup()。 但是:您不需要在TabActivity中的getTabHost()之后调用setup()。 http://developer.android.com/reference/android/widget/TabHost.html#setup()

答案 1 :(得分:0)

尝试扩展TabActivity 就像

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

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

我希望这可以帮助

答案 2 :(得分:0)

今天在2.2

上运行

一定要确实

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

这解决了它。