为了在使用viewholder
和fragment
时加载图像,我不知道我应该传递的上下文对象名称。以下是我的滑行代码:
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)
问题在于:
Glide.with(activity)
您正在创建一个新的Activity,而不是获取当前活动,这就是您收到该错误的原因。你应该做:
Glide.with(getActivity())...
理想情况下,您可以将Fragment上下文传递给RecyclerView
,并在调用中使用该上下文。文件说:
public static RequestManager with(Context context)
通过传递上下文开始使用Glide加载。使用上下文启动的任何请求将仅应用应用程序级别选项,并且不会基于生命周期事件启动或停止。通常,应该在结果将使用的级别启动加载。如果资源将在子片段的视图中使用,则应使用(android.app.Fragment)}使用该子片段启动加载。类似地,如果资源将在父片段的视图中使用,则应使用父片段以(android.app.Fragment)启动加载。同样,如果资源将在活动的视图中使用,则应使用with(android.app.Activity)}启动加载。
此方法适用于将在正常片段或活动生命周期之外使用的资源(例如,在服务中或通知缩略图中)。
参数:context - 不保留任何上下文。返回:可用于启动加载的顶级应用程序的RequestManager。
你可以这样做:
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;
}
然后你可以使用activity
。
在ViewHolder中使用getActivity,而不是MainActivity mainActvity;