如何停止我的 RecyclerView 重用视图
How to stop my RecyclerView reuse the view
我的问题是:当我滚动我的页面时,一些视图会出现在一个新的地方,并不是我来自适配器的所有内容都会显示,而只会显示其中的一部分。
下面是我的适配器 class:
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private List<BabyFigure> rinfoList ;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView id,date,time,type,quantity,demo;
public MyViewHolder(View view) {
super(view);
id = (TextView) view.findViewById(R.id.recycle_view_id);
date = (TextView) view.findViewById(R.id.recycle_view_date);
time = (TextView) view.findViewById(R.id.recycle_view_time);
type = (TextView) view.findViewById(R.id.recycle_view_type);
quantity = (TextView) view.findViewById(R.id.recycle_view_quantity);
demo = (TextView) view.findViewById(R.id.recycle_view_demo);
}
}
public RecyclerViewAdapter(List<BabyFigure> infoList) {
this.rinfoList = infoList;
setHasStableIds(true);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_content,
parent,false);
return new MyViewHolder(itemView);
}
@Override
public int getItemCount() {
Log.d(getClass().getSimpleName(),String.valueOf(rinfoList.size()));
return rinfoList.size();
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public void onBindViewHolder(MyViewHolder holder,int position) {
BabyFigure babyFigure = rinfoList.get(position);
holder.quantity.setText(String.valueOf(babyFigure.getQuantity()));
holder.id.setText(String.valueOf(babyFigure.getId()));
holder.demo.setText(babyFigure.getDemo());
holder.date.setText(babyFigure.getDate());
holder.time.setText(babyFigure.getTime());
holder.type.setText(babyFigure.getType());
}
}
非常感谢
问题是你没有实现 getItemId()
。您正在调用超类实现,它只是 return 所有位置的相同值。
至少,你可以这样做:
@Override
public long getItemId(int position) {
return position;
}
但如果您的数据项确实具有有意义的 ID,则您应该 return 项目的 ID。
@Override
public long getItemId(int position) {
return rinfoList.get(position).getId();
}
我的问题是:当我滚动我的页面时,一些视图会出现在一个新的地方,并不是我来自适配器的所有内容都会显示,而只会显示其中的一部分。 下面是我的适配器 class:
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private List<BabyFigure> rinfoList ;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView id,date,time,type,quantity,demo;
public MyViewHolder(View view) {
super(view);
id = (TextView) view.findViewById(R.id.recycle_view_id);
date = (TextView) view.findViewById(R.id.recycle_view_date);
time = (TextView) view.findViewById(R.id.recycle_view_time);
type = (TextView) view.findViewById(R.id.recycle_view_type);
quantity = (TextView) view.findViewById(R.id.recycle_view_quantity);
demo = (TextView) view.findViewById(R.id.recycle_view_demo);
}
}
public RecyclerViewAdapter(List<BabyFigure> infoList) {
this.rinfoList = infoList;
setHasStableIds(true);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_content,
parent,false);
return new MyViewHolder(itemView);
}
@Override
public int getItemCount() {
Log.d(getClass().getSimpleName(),String.valueOf(rinfoList.size()));
return rinfoList.size();
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public void onBindViewHolder(MyViewHolder holder,int position) {
BabyFigure babyFigure = rinfoList.get(position);
holder.quantity.setText(String.valueOf(babyFigure.getQuantity()));
holder.id.setText(String.valueOf(babyFigure.getId()));
holder.demo.setText(babyFigure.getDemo());
holder.date.setText(babyFigure.getDate());
holder.time.setText(babyFigure.getTime());
holder.type.setText(babyFigure.getType());
}
}
非常感谢
问题是你没有实现 getItemId()
。您正在调用超类实现,它只是 return 所有位置的相同值。
至少,你可以这样做:
@Override
public long getItemId(int position) {
return position;
}
但如果您的数据项确实具有有意义的 ID,则您应该 return 项目的 ID。
@Override
public long getItemId(int position) {
return rinfoList.get(position).getId();
}