-1

In meiner App habe ich ein Recyclerview-Widget implementiert, um Benutzerbild, Name und Firmennamen zu zeigen. Ich habe die Textinformationen in Realm DB gespeichert und diese Informationen werden direkt nach dem Start der App angezeigt. Zum Laden von Bildern verwende ich die Glide-Bildbibliothek. Aber das Problem ist, dass das Bild nicht direkt nach dem Klick geladen wird, solange ich nicht durch die gesamte Recycleransicht gehe. Wenn ich also nur auf die Recycleransicht klicke, wenn nur die ersten 10 Zeilen angezeigt werden, lädt es nacheinander die ersten Bilder. Und wenn ich dann zu einer anderen Seite zurückkehre und die Internetverbindung nicht vorhanden ist, werden die anderen Bilder nicht geladen. Das Bildfeld ist leer. Gibt es eine Möglichkeit, Bilder schneller mit Glide zu laden?Glide Imgae lädt dauert zu viel Zeit in Recyclerview android

Mein Code in Adapterklasse

public class MyColleaguesAdapter extends RecyclerView.Adapter<MyColleaguesAdapter.ColleagueHolder>{ 

    public static String TAG = MyColleaguesAdapter.class.getSimpleName(); 

    protected RequestManager glideManager; //make glideManager keeping 
    private List<MyColleagueModel> myColleague; 


    private Context context; 

    public interface ColleagueListListener { 
    } 

    public MyColleaguesAdapter(List<MyColleagueModel> colleagues,Context context) { 
     this.context=context; 
     myColleague = colleagues; 
     glideManager = Glide.with(context); 
    } 


    // create new views (invoked by the layout manager) 
    @Override 
    public ColleagueHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.colleage_row,parent,false); 
     return new ColleagueHolder(view); 
    } 
    @Override 
    public void onBindViewHolder(final ColleagueHolder holder, int position) { 
     app_preferences = PreferenceManager.getDefaultSharedPreferences(context); 

     final MyColleagueModel currentColleague = myColleague.get(position); 

     holder.colleagueName.setText(currentColleague.getName()); 
     holder.companyName.setText(currentColleague.getCompany()); 
     holder.jobTitle.setText(currentColleague.getTitle()); 

     holder.cardView.setCardBackgroundColor(Constant.color); 



     Glide.with(holder.itemView.getContext()) 
        .load(Constants.HTTP.PHOTO_URL + currentColleague.getMail() 
) 
        .thumbnail(0.5f) 
        .override(200, 200) 
        .diskCacheStrategy(DiskCacheStrategy.ALL) 
        .into(holder.colleaguePicture); 


     holder.cardView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Intent i=new Intent(context,DetailMyColleague.class); 
       i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       i.putExtra("IMAGE_URL",Constants.HTTP.PHOTO_URL + currentColleague.getMail()); 

       context.startActivity(i); 
      } 
     }); 

    } 


    @Override 
    public int getItemCount() { 
     return myColleague.size(); 
    } 

    public class ColleagueHolder extends RecyclerView.ViewHolder{ 

     public CardView cardView; 
     public ImageView colleaguePicture; 
     public TextView colleagueName; 
     public TextView companyName; 
     public TextView jobTitle; 

     public ColleagueHolder(View itemView) { 
      super(itemView); 
      colleaguePicture= itemView.findViewById(R.id.colleague_picture); 
      colleagueName= itemView.findViewById(R.id.colleague_name); 
      companyName= itemView.findViewById(R.id.company_name); 
      jobTitle= itemView.findViewById(R.id.job_title); 
      cardView= itemView.findViewById(R.id.cardview_user); 

     } 
    } 

In Hauptaktivität

private RecyclerView recyclerView; 
private MyColleaguesAdapter adapter; 
private List<MyColleagueModel> myColleagueList = new ArrayList<>(); 
private ColleagueController mController; 
private ColleagueResApiManager mApiManager; 

private Realm colleagueRealm; 
private LinearLayoutManager layoutManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mycolleagues_layout); 
    CookieHandler.setDefault(cookieManager); 

    colleagueConfigViews(); 

} 

public void colleagueConfigViews() { 
    recyclerView = this.findViewById(R.id.colleagues_recycler); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(MyColleaguesPage.this)); 
    recyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool()); 

    colleagueRealm = Realm.getDefaultInstance(); 

    RealmResults<MyColleagueModel> results = colleagueRealm.where(MyColleagueModel.class).findAll(); 

    for (int i = 0; i < results.size(); i++) { 

     myColleagueList.add(results.get(i)); 
    } 
    adapter = new MyColleaguesAdapter(myColleagueList,getApplicationContext()); 

    recyclerView.setAdapter(adapter); 
} 
+0

es einige Zeit dauern wird Bild von URL laden Sie ** ** Platzhalter angezeigt Bild verwenden können beim Laden –

+0

Versuch .override (100, 100) –

+0

@NileshRathod Wie kann ich Verwenden Sie Platzhalter hier. Gibt es einen Vorteil der Verwendung dieser, Sorry, ich bin neu in Android entwickeln – tamrezh21

Antwort

0

nach my above comments Glide Zeit Bild von URL laden Sie Platzhalter verwenden können Bild anzuzeigen, während das Laden

Glide.with(holder.itemView.getContext()) 
       .load(Constants.HTTP.PHOTO_URL + currentColleague.getMail()) 
       .thumbnail(0.5f) 
       .override(200, 200) 
       .placeholder(R.drawable.ic_placeholder) 
       .diskCacheStrategy(DiskCacheStrategy.ALL) 
       .into(holder.colleaguePicture); 
+0

wie kann ich deklarieren R.drawable.ic_placeholder im Zeichnungsordner – tamrezh21

+0

@ tamrezh21 fügen Sie einfach ein Beispielbild, das Sie in Ihrem ** res/zeichnenden ** Ordner anzeigen möchten als Zugriff über ** R.id.yourImageName ** –

+0

Das Problem wurde nicht gelöst. immer noch das gleiche Problem – tamrezh21

0

Ich bin nicht su Re, aber Sie können unten versuchen. Ich verwende den folgenden Code in meiner App. Es gibt keine Frage Geschwindigkeit ..

public class MyRecyclerAdapter extends RecyclerView.Adapter<ColleagueHolder > {  

    protected RequestManager glideManager; //make glideManager keeping 

    protected MyRecyclerAdapter(Context context ....Activity or Fragment) { 
     mContext = context; 
     glideManager = Glide.with((Fragment or Activity) object); 
    } 

    @Override 
    public void onBindViewHolder(final ColleagueHolder holder, int position) { 
     holder.colleagueName.setText(currentColleague.getName()); 
     holder.companyName.setText(currentColleague.getCompany()); 
     holder.jobTitle.setText(currentColleague.getTitle()); 
     holder.colleaguePicture.setImageResource(R.drawable.profile_image); 

     glideManager 
      .load(Constants.HTTP.PHOTO_URL + currentColleague.getMail()) 
      .placeholder(R.drawable.myholder) 
      .fitCenter() 
      .override(200, 200) 
      .into(holder.colleaguePicture); 

    holder.cardView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Intent i=new Intent(context,DetailMyColleague.class); 
       i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       i.putExtra("IMAGE_URL",Constants.HTTP.PHOTO_URL + currentColleague.getMail()); 
       ..... 
       context.startActivity(i); 
    } 
}); 
    } 
} 
+0

Wo kann ich schreiben die Methoden RequestManager und MyRecyclerAdapater in der Hauptaktivität. Könnten Sie bitte mehr erklären – tamrezh21

+0

Ich habe meinen Code auf Ihrer Grundlage aktualisiert, ich habe dort Aktivität. Könnten Sie bitte überprüfen und sagen Sie mir, und wie kann ich Adapter in der Haupttätigkeit auch anrufen, was soll ich noch tun, Entschuldigung, ich bin sehr neu, ich Android entwickeln – tamrezh21

+0

Ich sah Ihre aktualisierte Quelle.Und ich denke nicht, dass es kein Problem mit dem recyclerView-Adapter gibt. Also ich möchte, dass Sie überprüfen 1. Datenladezeit 2. machen Daten klein (wenn Daten Zeile ist 2000, machen Daten 20) Wenn Daten laden ist das Problem, müssen Sie Ihre Ladedaten asynchron (wie die Verwendung von Thread oder AsyncTask oder Relams asynchrone Daten laden) –