Java 如何在OnClick方法中使用Arraylist?

Java 如何在OnClick方法中使用Arraylist?,java,android,onclick,Java,Android,Onclick,当我尝试在OnClick方法中使用ArrayList和StringBuffer时,Android studio希望我将它们更改为final。但当我这样做时,我只能将最后插入的元素保留在ArrayList中 SharedReferences sp=mContext.getSharedReferences(“选中”,Context.MODE\u PRIVATE); 最终SharedReferences.Editor e=sp.edit(); final ArrayList sharedP=new A

当我尝试在
OnClick
方法中使用
ArrayList
StringBuffer
时,Android studio希望我将它们更改为
final
。但当我这样做时,我只能将最后插入的元素保留在
ArrayList

SharedReferences sp=mContext.getSharedReferences(“选中”,Context.MODE\u PRIVATE);
最终SharedReferences.Editor e=sp.edit();
final ArrayList sharedP=new ArrayList();
最后一个字符串单词=words.get(position.getMean();
final int id=words.get(position.getId();
最终StringBuffer str=新StringBuffer(“”);
holder.rowText.setText(word);
holder.rowText.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(holder.rowText.isChecked()){
sharedP.remove(sharedP.indexOf(id));
holder.rowText.setCheckMarkDrawable(空);
holder.rowText.setChecked(false);
}否则{
sharedP.add(id);
holder.rowText.setCheckMarkDrawable(R.drawable.ic\u check\u black\u 24dp);
holder.rowText.setChecked(true);
}

对于(inti=0;i,必须在该方法之外声明变量

private SharedPreferences.Editor e;
private ArrayList<Integer> sharedP= new ArrayList<>();
private String word = null;
private int id= 0;
private StringBuffer str = null;
privateSharedReferences.Editor e;
private ArrayList sharedP=new ArrayList();
私有字符串字=null;
私有int id=0;
私有StringBuffer str=null;
然后:

e=sp.edit();
sharedP=newarraylist();
word=words.get(position.getMean();
id=words.get(position.getId();
str=新的StringBuffer(“”);

将Arraylist和字符串缓冲区声明为全局变量

private ArrayList<Integer> sharedP = new ArrayList<>();
private StringBuffer str = new StringBuffer("");
private ArrayList sharedP=new ArrayList();
私有StringBuffer str=新StringBuffer(“”);

它可以工作,但仍然返回数组的最后一个元素。您可能不希望“id”是全局的,或者每次构造时都会覆盖它。它需要位于正确的函数范围内,或者需要将其保存在onClickHandler可以访问的某个位置,例如作为rowText对象的属性
private ArrayList<Integer> sharedP = new ArrayList<>();
private StringBuffer str = new StringBuffer("");