如何停止我的 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();
}