当我向下滚动然后回到顶部时,我的项目已更改为列表中的其他项目,如果我再次滚动,则会再次更改项目。
编辑文本值消失,微调器值自动更改。
这是我的MyRecyclerViewAdapter
课程。
class MyRecyclerViewAdapter extends
RecyclerView.Adapter<MyRecyclerViewAdapter.CustomViewHolder> {
private List<UpdateAtt> feedItemList;
private Context mContext;
private String[] mColorNames = new String[]{"Absent", "Half Day", "Leave", "Present", "Suspend"};
public MyRecyclerViewAdapter(Context context, List<UpdateAtt> feedItemList) {
this.feedItemList = feedItemList;
this.mContext = context;
}
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent, final int i) {
//View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_attendance, null);
View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_attendance, parent, false);
CustomViewHolder viewHolder = new CustomViewHolder(mView);
return viewHolder;
}
class CustomViewHolder extends RecyclerView.ViewHolder {
private final TextView tvName;
private final TextView tvSid;
private final EditText etRemark;
private final Spinner tvSpinner;
public CustomViewHolder(View view) {
super(view);
this.tvName = (TextView) view.findViewById(R.id.tv_Name);
this.tvSid = (TextView) view.findViewById(R.id.tv_sid);
this.etRemark = (EditText) view.findViewById(R.id.et_remarks);
this.tvSpinner = (Spinner) view.findViewById(R.id.spinner1);
ArrayAdapter<String> startColorsAdapter = new ArrayAdapter<String>(mContext, R.layout.simple_list_item, mColorNames);
tvSpinner.setAdapter(startColorsAdapter);
}
}
@Override
public void onBindViewHolder(final CustomViewHolder customViewHolder, final int position) {
customViewHolder.tvName.setText(Html.fromHtml(feedItemList.get(position).getSName()));
customViewHolder.tvSid.setText(Html.fromHtml(feedItemList.get(position).getSid()));
customViewHolder.etRemark.setText(Html.fromHtml(feedItemList.get(position).getRemark()));
//Setting text view title
}
@Override
public int getItemCount() {
return (null != feedItemList ? feedItemList.size() : 0);
}
}
答案 0 :(得分:1)
在holder.getAdapterPosition()
中使用onBindViewHolder()
,而不是onBindViewHolder()
返回的位置。
喜欢,
customViewHolder.tvName.setText(Html.fromHtml(feedItemList.get(customViewHolder.getAdapterPosition()).getSName()));
编辑:
设置:customViewHolder.setIsRecyclable(false);
答案 1 :(得分:0)
我建议您更改适配器类,如下所示。它应该工作。
class MyRecyclerViewAdapter extends
RecyclerView.Adapter<MyRecyclerViewAdapter.CustomViewHolder> {
private List<UpdateAtt> feedItemList;
private Context mContext;
private String[] mColorNames = new String[]{"Absent", "Half Day", "Leave", "Present", "Suspend"};
public MyRecyclerViewAdapter(Context context, List<UpdateAtt> feedItemList) {
this.feedItemList = feedItemList;
this.mContext = context;
ArrayAdapter<String> startColorsAdapter = new ArrayAdapter<String>(mContext, R.layout.simple_list_item, mColorNames);
}
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent, final int i) {
//View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_attendance, null);
View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_attendance, parent, false);
CustomViewHolder viewHolder = new CustomViewHolder(mView);
return viewHolder;
}
class CustomViewHolder extends RecyclerView.ViewHolder {
private final TextView tvName;
private final TextView tvSid;
private final EditText etRemark;
private final Spinner tvSpinner;
ArrayAdapter<String> startColorsAdapter;
public CustomViewHolder(View view) {
super(view);
this.tvName = (TextView) view.findViewById(R.id.tv_Name);
this.tvSid = (TextView) view.findViewById(R.id.tv_sid);
this.etRemark = (EditText) view.findViewById(R.id.et_remarks);
this.tvSpinner = (Spinner) view.findViewById(R.id.spinner1);
startColorsAdapter = new ArrayAdapter<String>(mContext, R.layout.simple_list_item, mColorNames);
}
public void bindView(int position) {
tvName.setText(Html.fromHtml(feedItemList.get(position).getSName()));
tvSid.setText(Html.fromHtml(feedItemList.get(position).getSid()));
etRemark.setText(Html.fromHtml(feedItemList.get(position).getRemark()));
tvSpinner.setAdapter(startColorsAdapter);
}
}
@Override
public void onBindViewHolder(final CustomViewHolder customViewHolder, final int position) {
customViewHolder.bindView(position);
}
@Override
public int getItemCount() {
return (null != feedItemList ? feedItemList.size() : 0);
}
}
为了保存每行中微调器项的状态,您需要声明一个数组以保存这些状态,并在bindView
函数内相应地填充微调器中的确切项。