0

J'ai créé un RecyclerView avec deux colonnes en utilisant StaggeredGridLayoutManager, chaque élément contient 2 images et du texte, la taille de la première image peut être (284 * 572, 840 * 401 ou 283 * 232) le second 35 * 35 et un texte, la liste paraissant très bien mais le problème est que lorsque l'utilisateur défile vers le bas le défilement n'est pas lisse et pas continu, les images prennent du stockage local (drawable), que pouvons-nous faire approuver l'expérience de défilement.Défilement n'est pas lisse dans Android RecyclerView en utilisant StaggeredGridLayout

FantasyTabAdpter.java

public class FantasyTabAdapter extends RecyclerView.Adapter<FantasyTabAdapter.MyViewHolder> { 
    private LayoutInflater inflater; 
    private ArrayList<Fantasy> fantasies; 

    public FantasyTabAdapter(Context context, ArrayList<Fantasy> fantasies) { 
     inflater = LayoutInflater.from(context); 
     this.fantasies = fantasies; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = inflater.inflate(R.layout.fantasy_tab_item, parent, false); 
     MyViewHolder holder = new MyViewHolder(view); 
     return holder; 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, int position) { 
     final Fantasy fantasy = fantasies.get(position); 
     holder.setData(fantasy, position); 
    } 

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

    class MyViewHolder extends RecyclerView.ViewHolder{ 
     ImageView fantasyImage; 
     TextView fantasyTitle; 
     ImageView fantasyStatus; 

     public MyViewHolder(View itemView) { 
      super(itemView); 
      fantasyImage = (ImageView) itemView.findViewById(R.id.fantasy_tab_image); 
      fantasyTitle = (TextView) itemView.findViewById(R.id.fantasy_tab_title); 
      fantasyStatus = (ImageView) itemView.findViewById(R.id.fantasy_tab_status); 
     } 

     public void setData(Fantasy fantasy, int position) { 
      this.fantasyTitle.setText(fantasy.getFantasyHeader()); 
      this.fantasyImage.setImageResource(fantasy.getFantasyHeaderImageID()); 
      this.fantasyStatus.setImageDrawable(fantasy.statusImagePlsgod); 
     } 
    } 
} 

Réglage de la RecyclerView dans un fragment

RecyclerView myRecyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view); 

StaggeredGridLayoutManager setLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); 
FantasyTabAdapter fantasyTabAdapter = new FantasyTabAdapter(getActivity(),fantasies); 

myRecyclerView.setLayoutManager(setLayoutManager); 
myRecyclerView.setAdapter(fantasyTabAdapter); 
+0

Fantasy est un objet contenant des informations sur le film fantastique, à partir de là, nous sommes obtenir l'identifiant des images et le texte – user1684140

Répondre

2

Vous pouvez mettre en cache vos images pour améliorer les performances. d'abord regarder ces deux vidéos:

Caching UI data

The Magic of LRU Cache

puis après avoir compris la raison et l'idée sur la façon de le résoudre, vous pouvez utiliser des bibliothèques d'images comme:

Glide

picasso

ceux implémente stratégie nt de la mise en cache tout ce que vous avez besoin est d'importer un d'entre eux et l'utiliser par exemple au lieu de:

this.fantasyImage.setImageResource(fantasy.getFantasyHeaderImageID()); 

vous pouvez utiliser

Picasso.with(context).load(fantasy.getFantasyHeaderImageID()).into(this.fantasyImage); 
+1

Glide est beaucoup mieux –