Fragment XXX not attached to Activity

上午点开项目app文章浏览时出现了以下错误:

2018-10-22 11:19:06.425 31321-31321/com.jm.fxw E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.jm.fxw, PID: 31321
    java.lang.IllegalStateException: Fragment ArticleDetailDelegate{4e8a308} not attached to Activity
        at android.support.v4.app.Fragment.getResources(Fragment.java:715)
        at com.jm.ec.main.index.article.ArticleDetailDelegate.updateZan(ArticleDetailDelegate.java:306)
        at com.jm.ec.main.index.article.ArticleDetailDelegate.handleZanResult(ArticleDetailDelegate.java:300)
        at com.jm.ec.main.index.article.ArticleDetailDelegate.lambda$cK6ng6nnI4SMTw1P3K3-br7tLeQ(ArticleDetailDelegate.java)
        at com.jm.ec.main.index.article.-$$Lambda$ArticleDetailDelegate$cK6ng6nnI4SMTw1P3K3-br7tLeQ.onSuccess(lambda)
        at com.jm.core.net.callback.RequestCallbacks.onResponse(RequestCallbacks.java:44)
        at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6360)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)

查看了报错位置,定位到Drawable drawable = getResources().getDrawable(R.drawable.zan_selected);

private void updateZan() {
        TextView tvZan = newsFooter.findViewById(R.id.tv_zan);
        Drawable drawable = getResources().getDrawable(R.drawable.zan_selected);
        tvZan.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, drawable, null);
        tvZan.setCompoundDrawablePadding(5);
    }

这有可能是因为Fragment在还没有Attach到Activity时,调用了如getResource()等,需要上下文Content的代码。因此在使用到上下文资源的地方加上isAdded()判断,getResources前加上 getActivity(),如下:

private void updateZan() {
        if(isAdded()){
            TextView tvZan = newsFooter.findViewById(R.id.tv_zan);
            Drawable drawable = getActivity().getResources().getDrawable(R.drawable.zan_selected);
            tvZan.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, drawable, null);
            tvZan.setCompoundDrawablePadding(5);
        }
    }

继续测试,未出现以上错误。

猜你喜欢

转载自blog.csdn.net/yun382657988/article/details/83273125