2016-07-07 2 views
0

Glide을 사용하여 Recyclerview (onBindViewHolder)의 이미지를 RequestListener 콜백으로로드합니다. 이미지가 처음로드 될 때마다 링크는 SharedPreferences 파일에 key이라는 이름으로 저장됩니다. 이제 인수로 RequestListener에 이름을 전달하고 싶습니다. RequestListener에 인수로서 이름을 전달하는 방법? 그리고 또한 실패를로드하는 경우에 onException 메서드에서로드 할 수 있도록 ImageView 전달해야합니다.RequestListener에 인수 전달 Glide

코드 :

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"); 
     } 

    } 

RequestListener : 그것은 RequestListener<String, GlideDrawable>를 구현

는, 클래스를 생성 CustomRequestListener를 호출하기 위해 합리적인 것 같습니다이 경우
 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; 
     } 
    }; 

답변

1

과 - a를 생성자는 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

를 참조하십시오.