您的列表不更新的原因是,你是不是曾经将您的数据项的适配器。您只将它们添加到choicesArray
这是您传递给新的ArrayAdapter()构造函数的数组。
该构造函数不适配器绑定到数组,但基本上复制到阵列的适配器(在你调用构造函数的时间)后到阵列的变更不会在一个ArrayAdapter中反映出来。
我喜欢这样认为ArrayAdapter <>与ArrayList <>基本上是一样的,并且可以为某些AdpaterView父项生成子视图。您可以将它传递给array[]
以开始,它将使用该数组中的值进行初始化,但它不会将数组链接到适配器或ListView。在最初的构造函数调用之后,任何一个变化都不会反映在另一个变体中。
所以,你应该改变你的代码看起来像这样:
addButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
EditText editText = (EditText) findViewById(R.id.edit_choice);
String message = editText.getText().toString();
adapter.add(message);
//adapter.notifyDataSetChanged(); //<-- you might need to call this, but I think it might work without if you do it this way.
//listView.setAdapter(adapter); //<-- you shouldn't need to call this each time. Once at the begining is enough.
}
});
编辑:
改变你的ArrayAdapter的构造和删除choiceArray参数,所以你应该会留下这样的:
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1);
之后,我认为你应该很好去。本质上,问题在于,由于您传递的是数组,因为数组的大小是固定的(您的长度为1),所以不允许添加任何内容。如果你愿意,我怀疑你可以使用ArrayList<String>
而不是String[]
,但对于你的情况,我认为只要跳过这个参数并直接添加项目到你的适配器将会更容易,只要你需要添加新的。
什么是变量'选择'你似乎没有在你发布的代码中声明它。 – FoamyGuy 2013-03-06 20:11:54
道歉,我编辑它。这是一个类变量 – 2013-03-06 20:28:00
好吧,我编辑我的答案与您需要修复它的信息。我将再次编辑您的帖子以添加您移除的标签。请让他们有这个时候,使用特定的标签保留本网站举办的,它给你一个更好的机会得到来自人的答案,因为很多人“最喜欢”的标签,他们在 – FoamyGuy 2013-03-06 21:57:05