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

时间:2015-11-02 12:21:35

标签: java android arrays 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

4 个答案:

答案 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>();