に私のアプリのMainActivityクラスを使用しながら、カスタムRecyclerViewアダプタが重いラグを発生させるには、約10のタブでViewPagerで構成されています。各タブの中で、私はListItemをアンドロイドRecyclerViewを使ってロードしています。この問題は、ユーザーがViewPagerの右端をスワイプするときに発生します。デバッグ後、私は問題が私のCustomListAdapter内で発生することを発見しました。viewpager
私はonCreateViewHolder内部レイアウトのInflaterの数を増加させる場合には増加する遅れを見出しました。
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder;
// performance hit
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_row, parent, false);
View itemViewlast = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_row_last, parent, false);
View itemViewdefault = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_row_default, parent, false);
switch (viewType) {
case 0:
viewHolder = new MyViewHolder(itemView);
break;
case 3:
viewHolder = new MyViewHolder(itemViewlast);
break;
default:
viewHolder = new MyViewHolder(itemView1);
break;
}
return viewHolder;
}
私がLayoutInflaterをスイッチケース内にシフトしたことを減らすために、左のいくつかの遅れがあるよう
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder;
switch (viewType) {
case 0:
// moved here
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_row, parent, false);
viewHolder = new MyViewHolder(itemView);
break;
case 3:
// moved here
View itemViewlast = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_row_last, parent, false);
viewHolder = new MyViewHolder(itemViewlast);
break;
default:
// moved here
View itemViewdefault = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_row_default, parent, false);
viewHolder = new MyViewHolder(itemView1);
break;
}
return viewHolder;
}
は今、私はまだ感じます。だから私の質問は、この遅れを減らすか、レイアウトインフレータをonCreateViewHolderメソッドの外に移動する方法はありますか?
MyViewHolder方法:
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title, rating, genre,detailmovie,movieName,movieTime;
public ImageView thumbNail, movieNail;
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
rating = (TextView) view.findViewById(R.id.rating);
genre = (TextView) view.findViewById(R.id.genre);
detailmovie = (TextView) view.findViewById(R.id.detailmovie);
movieName = (TextView) view.findViewById(R.id.movieName);
movieTime = (TextView) view.findViewById(R.id.movieTime);
thumbNail = (ImageView) view.findViewById(R.id.thumbnail);
movieNail = (ImageView) view.findViewById(R.id.movieThumbnail);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
switch (viewHolder.getItemViewType()) {
case 0:
MyViewHolder vh1 = (MyViewHolder) viewHolder;
configureViewHolder1(vh1, position);
break;
case 3:
MyViewHolder vh3 = (MyViewHolder) viewHolder;
configureViewHolder1(vh3, position);
break;
default:
MyViewHolder vh4 = (MyViewHolder) viewHolder;
configureViewHolder1(vh4, position);
break;
}
}
private void configureViewHolder1(MyViewHolder vh1, int position) {
final Movie movie = movieItems.get(position);
vh1.title.setText(movie.getTitle());
vh1.rating.setText("Rating: " + String.valueOf(movie.getRating()));
Glide.with(activity).
load(Uri.parse(movie.getThumbnailUrl())).
crossFade().
placeholder(R.drawable.placeholder).diskCacheStrategy(DiskCacheStrategy.SOURCE).
dontTransform().
into(vh1.thumbNail);
vh1.movieDetail.setText(String.valueOf(movie.movieDetail()));
vh1.movieName.setText(String.valueOf(movie.getmovieName()));
vh1.movieTime.setText(String.valueOf(movie.getmovieTime()));
vh1.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fragmentJump(movie);
}
});
}
あなたはMyViewHolderコードを投稿することができますか? – GuilhE
@GuilhE MyViewHolderコードが追加されました。 – user1590595