我在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
?
答案 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);