应该将哪个上下文名称传递给Glide方法?

时间:2017-04-01 22:31:50

标签: java android firebase firebase-realtime-database android-glide

为了在使用viewholderfragment时加载图像,我不知道我应该传递的上下文对象名称。以下是我的滑行代码:

Glide.with(activity).load(cheeses.getImageView()).fitCenter().into(mImageView);

错误:

at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1555) 
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:696)
at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:667)
at com.bumptech.glide.manager.RequestManagerRetriever.getSupportRequestManagerFragment(RequestManagerRetriever.java:187)
at com.bumptech.glide.manager.RequestManagerRetriever.supportFragmentGet(RequestManagerRetriever.java:195)
at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:104)
at com.bumptech.glide.Glide.with(Glide.java:644)
at com.support.android.designlibdemo.ViewHolderClass.ViewHolder.bindToCheese(ViewHolder.java:42)
at com.support.android.designlibdemo.CheeseListFragment$1.populateViewHolder(CheeseListFragment.java:112)
at com.support.android.designlibdemo.CheeseListFragment$1.populateViewHolder(CheeseListFragment.java:93)

2 个答案:

答案 0 :(得分:2)

在ViewHolder中使用getActivity,而不是MainActivity mainActvity;

答案 1 :(得分:2)

问题在于:

.directive('goBackHistory', ['$window', function ($window) {
    return {
        restrict: 'A',
        link: function (scope, elm, attrs) {
            elm.on('click', function ($event) {
                $event.stopPropagation();
                if ($window.history.length) {
                    $window.history.back();
                } else {
                    $window.close();  
                }
            });
        }
    };
}])

您正在创建一个新的Activity,而不是获取当前活动,这就是您收到该错误的原因。你应该这样做:

 Glide.with(activity)

理想情况下,您可以将Fragment上下文传递到 Glide.with(getActivity())... ,并在调用中使用该上下文。文件说:

  

公共静态RequestManager with(Context context)

     

开始加载   通过传递上下文来滑行。任何使用上下文开始的请求   只会应用应用程序级别选项,而不会   基于生命周期事件启动或停止。通常,负载应该   在结果将被使用的级别启动。如果资源   将在子片段的视图中使用,应该启动加载   与(android.app.Fragment)}使用该子片段。同样的,   如果资源将在父片段的视图中使用,则   应该使用with(android.app.Fragment)启动load   父片段。同样,如果资源将用于   在活动中查看,应该启动加载   与(android.app.Activity)}。

     

此方法适用于将在外部使用的资源   正常的片段或活动生命周期(例如在服务中,或   通知缩略图)。

     

参数:context - 不保留任何上下文。返回:A   RequestManager用于可用于启动的顶级应用程序   一个负载。

Source

你可以这样做:

RecyclerView

然后你可以使用public ViewHolder(View view, Context context) { super(view); mView = view; mImageView = (ImageView) view.findViewById(R.id.avatar); mTextView = (TextView) view.findViewById(android.R.id.text1); activity = context; }