我有一个ArrayList<String> tokens;
来存储ListViewClick上的令牌值。在我从ArrayList<String> tokens
检索数据时添加值后,它仅显示最后添加的值
ArrayList<String> tokens;
...
....
public void onItemClick(AdapterView<?> listView, View view,
int position, long id) {
tokens = new ArrayList<String>();
Cursor cursor = (Cursor) listView.getItemAtPosition(position);
String selectedtoken = cursor.getString(cursor.getColumnIndexOrThrow("ContactToken"));
tokens.add(selectedtoken);
}
...
...
Log.i("array: ", tokens.toString()); // shows the last added value
答案 0 :(得分:5)
移动声明
tokens = new ArrayList<String>();
从onItemClick
方法中最好进入构造函数,因此每次调用该方法时都不会重新初始化,例如
public MyClass() {
tokens = new ArrayList<>();
}
其中tokens
可以定义为
private List<String> tokens;
答案 1 :(得分:5)
您必须在ArrayList
方法之外移动onItemClick()
的初始化。目前,每次单击某个项目时,都会创建一个新的ArrayList
ArrayList<String> tokens = new ArrayList<String>();
...
....
public void onItemClick(AdapterView<?> listView, View view,int position, long id) {
Cursor cursor = (Cursor) listView.getItemAtPosition(position);
String selectedtoken = cursor.getString(cursor.getColumnIndexOrThrow("ContactToken"));
tokens.add(selectedtoken);
}
...
...
Log.i("array: ", tokens.toString()); // shows the last added value
答案 2 :(得分:1)
在onCreate()方法中初始化Arraylist
答案 3 :(得分:0)
问题是,您尝试在令牌之前访问您的信息已初始化。
你必须移动它。例如onCreate-Method。
也可以将其移动到构造函数中。
第三种方法是改变这种情况:
ArrayList<String> tokens;
到此:
ArrayList<String> tokens= new ArrayList<String>();