0

我正在使用ListViewinside a 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= new String[]{"item 1", "item 2", "item 3", "item 4", "item 5", "item 6"};

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

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

items[0]="injected item";

并且比我调用notifyDataSetChanged()我的适配器一切正常,因为我的列表中的项目正确更改,显示为第一个元素的字符串注入项目而不是项目 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所以实际的问题是:如果我需要更改列表中的项目数,我该如何更新?

4

1 回答 1

1

您也可以使用 ListArray。适配器获取列表或数组对象以显示其项目。您可以为其设置任何数组或列表,并且随时需要更改项目,您可以更改它的数组,但如果您想更改数组的数量,则数组的长度为常数您应该使用的数组项。您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);
于 2013-10-16T15:00:09.463 回答