使用ArrayAdapter更新ListView

时间:2013-10-16 14:43:13

标签: android listview android-listview android-arrayadapter

我在ListView内使用了fragment,但我在更新ListView时遇到了问题。

这是我用于在ListView

上设置适配器的代码
    adapter = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1,
            ((TabNavigation)this.getActivity()).getItems());
    setListAdapter(adapter);

其中getItems()是String数组的getter,名为items:

items= new String[]{"item 1", "item 2", "item 3", "item 4", "item 5", "item 6"};

此时一切正常:我可以在我的列表中看到六个项目。

现在,如果我尝试以这种方式更新我的数组:

items[0]="injected item";

而不是我在我的适配器上调用notifyDataSetChanged()一切正常,因为我的列表中的项目正确更改,显示为String注入项而不是项1的第一个元素。 但是,如果不使用该指令,我将使用以下内容:

items= new String[]{"injected item", "item 2", "item 3", "item 4", "item 5", "item 6"};

而不是通过我的适配器调用notifyDataSetChanged(),列表不会更新。

我认为这取决于价值的通过以供参考。似乎适配器继续引用我第一次设置适配器时传递的数组副本。 事实上,如果我使用:

temp= new String[]{"injected item", "item 2", "item 3", "item 4", "item 5", "item 6"};      
System.arraycopy(temp, 0, items, 0, temp.length);

listView正确更新。但我必须使用与原始数组完全相同的长度。

所以实际问题是:如果我需要更改列表中的项目数,如何更新ListView

1 个答案:

答案 0 :(得分:1)

你也可以使用ListArray.adapter获取一个列表或数组对象来显示它的items.you可以设置任何数组或列表,任何时候你需要更改项目,你可以更改它数组,但如果你想要数组有恒定的长度更改你应该使用的数组项目数adapter.add("string");。你可以使用listarray而不是传递数组到你的适配器,更改或添加也很容易。这段代码可以帮到你

final ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < values.length; ++i) {
    list.add(values[i]);
}
final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
listview.setAdapter(adapter);