gpt4 book ai didi

android - 将参数传递给 RequestListener Glide

转载 作者:行者123 更新时间:2023-11-30 01:12:51 24 4
gpt4 key购买 nike

我正在使用 Glide(版本 3)通过 RequestListener 回调在 Recyclerview(onBindViewHolder) 中加载图像。每当第一次加载图像时,链接将存储在名为 key 的 SharedPreferences 文件中。现在我想将名称作为参数传递给 RequestListener。如何将名称作为参数传递给 RequestListener?而且我还必须传递 ImageView,以便在加载失败时加载 onException 方法。

代码:

onBindViewHolder 方法:

@Override
public void onBindViewHolder(final ContactsAdapter.ContactsViewHolder holder, int position) {

final ContactInfo current = cDataset.get(position);
holder.contactName.setText(current.Contact_name);
//current.Conatct_name has to be passed to requestListener
URL url = Util.getSignedUrl(getContext().getApplicationContext(), current.phone_number.concat("/").concat("profile").concat("/").concat(current.phone_number).concat(".jpg"));

if (url != null) {

Log.d("image", url.toString());
Glide.with(getContext()).load(url.toString()).skipMemoryCache(true).fitCenter().diskCacheStrategy(DiskCacheStrategy.SOURCE).listener(requestListener).error(R.mipmap.ic_launcher).into(holder.contactProfileImage);

} else {
Log.d("image", "null");
}

}

请求监听器:

        public RequestListener<String, GlideDrawable> requestListener = new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {

Log.d("No Image",String.valueOf(e));

Log.d("Loading from cache","true");


return true;
}

@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
Log.d("storing cache ","true");

return false;
}
};

最佳答案

在这种情况下创建一个类似乎是合理的,称之为CustomRequestListener它实现了 RequestListener<String, GlideDrawable> - 添加构造函数到 CustomRequestListener这需要 String keyImageView . CustomRequestListener甚至可以是内部类。这是一个代码示例:

private class CustomRequestListener implements RequestListener<String, GlideDrawable>{ 
//variables to hold the arguments you will be passing to the constructor
private String key;
private ImageView imageView;

//constructor taking the arguments as you desire
public CustomRequestListener(String _key, ImageView defaultImageView){
this.key = _key;
this.imageView = defaultImageView
}

//the rest of your code goes here
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {

Log.d("No Image",String.valueOf(e));
Log.d("Loading from cache","true");
//you can now load the "default" imageView here...

return true;
}

@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
Log.d("storing cache ","true");
//here you can save the URL into the SharedPreference - using the "key" variable as its key. Example:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = prefs.edit();
editor.putString(key, theURL);
editor.apply();

return false;
}

};

然后要使用自定义监听器,您可以执行以下操作:

Glide.with(getContext()).load(url.toString()).skipMemoryCache(true).fitCenter().diskCacheStrategy(DiskCacheStrategy.SOURCE).listener(new CustomRequestListener (someKey, someImageView)....

参见 some good examples of using RequestListener

希望对您有所帮助。

关于android - 将参数传递给 RequestListener Glide,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38247431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com