我在onBindViewHolder
中使用CardAdapter
。它包含onClick
的checkedTextView
方法。我正在尝试获取这些文本并放入Arraylist(sharedP)
。但是ArrayList
仅返回最后一个元素。我的错在哪里
public void onBindViewHolder(@NonNull final CardTasarimTutucu holder, int position) {
SharedPreferences sp = mContext.getSharedPreferences("checked",Context.MODE_PRIVATE);
e=sp.edit();
sharedP= new ArrayList<>();
word = words.get(position).getMean();
Log.e("getMean",word);
id= words.get(position).getId();
str= new StringBuffer("");
holder.rowText.setText(word);
holder.rowText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.rowText.isChecked()) {
sharedP.remove(sharedP.indexOf(word));
flag=false;
holder.rowText.setCheckMarkDrawable(null);
holder.rowText.setChecked(false);
} else {
sharedP.add(word);
flag=true;
Log.e("deneme",word);
holder.rowText.setCheckMarkDrawable(R.drawable.ic_check_black_24dp);
holder.rowText.setChecked(true);
}
str.delete(0,str.length());
for(int i=0;i<sharedP.size();i++){
Log.e("sharedpreference1",sharedP.get(i).toString());
str.append(sharedP.get(i));
str.append(".");
}
if(flag==false){
e.remove("str");
e.commit();
}
Log.e("size",str.toString());
e.putString("str", str.toString());
e.remove("set");
e.commit();
}
});
}
example of checkedTextView
shared preference
最佳答案
首先,onBindViewHolder
调用RecyclerView
中的每个项目,以便在视图项目中的每个位置显示数据。因此,这就像一个循环。在代码中,初始化sharedP
onBindViewHolder
中的sharedP= new ArrayList<>();
数组。因此,对于您传递/滚动的每个项目,数组将再次初始化,而上一个项目将丢失。换句话说,当您到达列表的末尾时,列表中将只有1个项目,即最后一个。