错误提示如下:
AndroidRuntime(): java.lang.NullPointerException
AndroidRuntime(): at android.widget.TabWidget.
focusCurrentTab(TabWidget.java:)
AndroidRuntime(): at android.widget.TabHost.
setCurrentTab(TabHost.java:)
AndroidRuntime(): at android.widget.TabHost$2.
onTabSelectionChanged(TabHost.java:)
AndroidRuntime(): at android.widget.TabWidget$
TabClickListener.onClick(TabWidget.java:)
AndroidRuntime(): at android.view.View.
performClick(View.java:)
错误提示范围
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 , , , ...
// we have tab views at , , , ...
if (mDividerDrawable != null) {
index *= ;
}
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);
}