android - 滚动时 Recyclerview 更改项目

标签 android android-recyclerview

谁能给我解释一下,这是什么问题?

当我向下滚动然后返回顶部时,我的项目已更改为列表中的其他项目,如果我再次滚动,项目将再次更改。

这是我的适配器。

public class AcademicAdapter extends RecyclerView.Adapter<AcademicAdapter.AcademicVH> {
    private LayoutInflater inflater;
    private List<AcademicStatus> data;

public AcademicAdapter(List<AcademicStatus> data) {
    this.data = data;
}

@Override
public AcademicVH onCreateViewHolder(ViewGroup parent, int viewType) {
    inflater = LayoutInflater.from(parent.getContext());
    View view = inflater.inflate(R.layout.row_academic_level, parent, false);

    return new AcademicVH(view);
}

@Override
public void onBindViewHolder(AcademicVH holder, int position) {
    View view = inflater.inflate(R.layout.row_container_academic_level, holder.containerData, false);

    TextView txtSubject = (TextView) view.findViewById(R.id.txtSubjectValue);
    TextView txtGroup = (TextView) view.findViewById(R.id.txtGroupValue);
    TextView txtStatus = (TextView) view.findViewById(R.id.txtStatusValue);
    TextView txtFinalNote = (TextView) view.findViewById(R.id.txtFinalNoteValue);
    TextView txtYear = (TextView) view.findViewById(R.id.txtYearValue);

    txtSubject.setText(data.get(position).getSubject());
    txtGroup.setText(data.get(position).getGroup());
    txtStatus.setText(data.get(position).getStatus());
    txtFinalNote.setText(data.get(position).getFinalNote());
    txtYear.setText(data.get(position).getAcademicYear());

    holder.containerData.addView(view);
}

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

public static class AcademicVH extends RecyclerView.ViewHolder {
    private LinearLayout containerData;

    public AcademicVH(View itemView) {
        super(itemView);

        containerData = (LinearLayout) itemView.findViewById(R.id.containerData);
    }
}
}

最佳答案

尝试在 RecyclerView.ViewHolder 上初始化您的 View 并在 onCreateViewHolder() 上扩充您的布局并且不要在 onBindViewHolder()< 中再次扩充布局

public class AcademicAdapter extends RecyclerView.Adapter<AcademicAdapter.AcademicVH> {
    private LayoutInflater inflater;
    private List<AcademicStatus> data;

public AcademicAdapter(List<AcademicStatus> data) {
    this.data = data;
}

@Override
public AcademicVH onCreateViewHolder(ViewGroup parent, int viewType) {

    View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_academic_level, parent, false);
    AcademicVH mViewHold = new ViewHolder(mView);
    return mViewHold;
}

@Override
public void onBindViewHolder(AcademicVH holder, int position) {
     final AcademicStatus mItems=this.data.get(position);


    holder.txtSubject.setText(mItems.getSubject());
    holder.txtGroup.setText(mItems.getGroup());
    holder.txtStatus.setText(mItems.getStatus());
    holder.txtFinalNote.setText(mItems.getFinalNote());
    holder.txtYear.setText(mItems.getAcademicYear());

}

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

public static class AcademicVH extends RecyclerView.ViewHolder {
    public LinearLayout containerData;
    public TextView txtSubject,txtGroup,txtStatus,txtFinalNote,txtYear;

    public AcademicVH(View itemView) {
        super(itemView);

        containerData = (LinearLayout) itemView.findViewById(R.id.containerData);
        txtSubject = (TextView) itemView.findViewById(R.id.txtSubjectValue);
        txtGroup = (TextView) itemView.findViewById(R.id.txtGroupValue);
        txtStatus = (TextView) itemView.findViewById(R.id.txtStatusValue);
        txtFinalNote = (TextView) itemView.findViewById(R.id.txtFinalNoteValue);
        txtYear = (TextView) itemView.findViewById(R.id.txtYearValue);
    }
}
}

关于android - 滚动时 Recyclerview 更改项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36613463/

相关文章:

android - Toolbar 是否可以在 RelativeLayout 中工作?

Android - 在改造中设置适配器

android - 如何在 Recyclerview 中将所选项目位置更改为顶部?

android - 无法获取其他用户名

android - 数据绑定(bind)中看不到工具栏

android - 如何在 AutoCompleteTextView 的回收站 View 中显示数据列表

android - 在 android 中延迟加载 recyclerView

android - 使用 API 28 时不显示 Recyclerview

安卓| ViewHolder

android - 在 AutoCompleteTextView 下拉列表中突出显示搜索文本