我的Android ArrayList仅显示最后添加的值

Naz*_*141 1 java arrays android arraylist

我有一个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
Run Code Online (Sandbox Code Playgroud)

Rei*_*eus 5

移动声明

tokens = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

onItemClick优选地,该方法优选地进入构造函数中,因此每次调用该方法时都不重新初始化,例如

public MyClass() {
   tokens = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)

哪里tokens可以定义为

private List<String> tokens;
Run Code Online (Sandbox Code Playgroud)


Tho*_*aud 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
Run Code Online (Sandbox Code Playgroud)