NullPointException-TabWidget.focusCurrentTab(TabWidget.java:401)

来源:互联网 发布:产品网络推广怎么做 编辑:程序博客网 时间:2024/06/01 10:46

错误提示如下:

AndroidRuntime(4437): java.lang.NullPointerExceptionAndroidRuntime(4437): at android.widget.TabWidget.    focusCurrentTab(TabWidget.java:401)AndroidRuntime(4437): at android.widget.TabHost.    setCurrentTab(TabHost.java:381)AndroidRuntime(4437): at android.widget.TabHost$2.    onTabSelectionChanged(TabHost.java:175)AndroidRuntime(4437): at android.widget.TabWidget$    TabClickListener.onClick(TabWidget.java:487)AndroidRuntime(4437): at android.view.View.    performClick(View.java:2640)

错误提示范围

Android手机 系统版本2.3.7及2.3.7以下

错误原因

获取不到TabWidget中的ChildView,抛出空指针异常。

提醒

TabWidget中的text以及下划线属于TabWidget的子View,而在查找子View时,如果所有TabWidget都设置了text和下划线的话,一个TabWidget算有2个子View.

错误分析

Android 源码2.3.7及2.3.7以前,TabWidget中的getChildTabViewAt(int index)源码如下:

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); }

假如我们项目中设置了mDividerDrawable又没用,导致点击第三个tab(或者其他TabWidget,排除第1个TabWidget)的时候,index=2*3=6,导致找不到childView.

错误解决办法

删掉多余的代码TabWidget.setDividerDrawable();

错误扩展

为何4.x.x以上系统不会抛出该异常呢?
Android 源码4.x.x以上系统,TabWidget中的getChildTabViewAt(int index)源码如下:

 public View More ...getChildTabViewAt(int index) {   return getChildAt(index); }
0 0
原创粉丝点击