将支持库更新为版本23.2.0
compile 'com.android.support:design:23.2.0'
我在选项卡之间切换时遇到此错误(Android版本5.0.2):
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.drawable.Drawable.setAlpha(int)' on a null object reference
at android.support.v4.widget.SwipeRefreshLayout.setColorViewAlpha(SwipeRefreshLayout.java:217)
at android.support.v4.widget.SwipeRefreshLayout.reset(SwipeRefreshLayout.java:199)
at android.support.v4.widget.SwipeRefreshLayout.onDetachedFromWindow(SwipeRefreshLayout.java:213)
at android.view.View.dispatchDetachedFromWindow(View.java:14579)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3138)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3135)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3135)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:4502)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:4475)
at android.view.ViewGroup.removeView(ViewGroup.java:4407)
at android.support.v4.view.ViewPager.removeView(ViewPager.java:1430)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1165)
at android.support.v4.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1349)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:708)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:164)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1177)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:608)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:570)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:551)
at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:1991)
at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1024)
at android.support.design.widget.TabLayout.selectTab(TabLayout.java:994)
at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1262)
at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1360)
at android.view.View$PerformClick.run(View.java:20978)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6134)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
似乎是一个支持库的bug,是否有任何人也有这个问题?任何解决方法?
答案 0 :(得分:1)
检查所有库可能会覆盖某些资源'void android.graphics.drawable.Drawable.setAlpha(int)'。 void setAlpha(null)
答案 1 :(得分:0)
我没有看到这个问题,但是如果确实在SwipeRefreshLayout小部件中,你可以将它子类化并用try / catch块包装onDetachedFromWindow调用。
public class MySwipeRefreshLayout extends SwipeRefreshLayout {
// constructor methods here
@Override
public void onDetachedFromWindow() {
try {
super.onDetachedFromWindow();
catch (Exception ignore) {
}
}
}
答案 2 :(得分:0)
抛出以下部分代码的异常:
private void setColorViewAlpha(int targetAlpha) {
mCircleView.getBackground().setAlpha(targetAlpha);
mProgress.setAlpha(targetAlpha);
}
这里mCircleView (CircleImageView)是ImageView的一个实例。如果您在应用程序中的任何位置执行任何针对发布内存的操作,请执行以下操作:
public void unbindDrawables(View view) {
try {
if (view != null) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ImageView) {
ImageView imageView = (ImageView) view;
if (imageView != null) {
Drawable drawable = ((ImageView) view).getDrawable();
if (drawable != null && drawable instanceof BitmapDrawable) {
drawable.setCallback(null);
}
imageView.setBackgroundResource(0);
imageView.setImageDrawable(null);
imageView.setBackgroundDrawable(null);
imageView.setImageBitmap(null);
}
} else if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
if ((view != null) && !(view instanceof AdapterView)) {
((ViewGroup) view).removeAllViews();
}
}
view = null;
}
} catch (Exception e) {
//TODO:: handle Exception
}
}
在上面的代码中
if (view instanceof ImageView) {
ImageView imageView = (ImageView) view;
if (imageView != null) {
Drawable drawable = ((ImageView) view).getDrawable();
if (drawable != null && drawable instanceof BitmapDrawable) {
drawable.setCallback(null);
}
imageView.setBackgroundResource(0);
imageView.setImageDrawable(null);
imageView.setBackgroundDrawable(null);
imageView.setImageBitmap(null);
}
}
这些部分使mCircleView和它的Drawable都 NULL ,并且当 SwipeRefreshLayout 调用reset时,抛出该异常。
更多信息:NullPointerException:SwipeRefreshLayout.setColorViewAlpha