1

我有一个带有 ArrayAdapter 的 ListFragment 来显示对象列表。我想刷新 ListFragment 的内容。这些项目本身会稍微改变它们的文本,也会改变它们的顺序。我有一百多个项目,我发现这样做的唯一方法是清除列表并重新添加它们,但这感觉效率低下。

例如:

ListFragment 显示无序:

Object A
Object D
Object F
Object B
Object E
Object C

ListFragment 显示排序:

Object A
Object B
Object C
Object D
Object E
Object F

我这样设置我的 ArrayAdapter:

mAdapter = new ArrayAdapter<Store>(mContext,
    android.R.layout.simple_list_item_1,
    OtherClass.list);
mAdapter.setNotifyOnChange(true);
setListAdapter(mAdapter);

“其他类”是:

public class OtherClass extends Object {

    public ListArray<Object> list;
    ...
}

有问题的代码:

mAdapter.clear();
for (Object o : list) {
    mAdapter.add(store);
}

我已经阅读了很多关于它如何工作以及如何使用的答案,mAdapter.notifyDataSetChanged()但没有一个能解决我的问题或回答我的问题。刷新列表的唯一方法是从列表中添加/删除某些内容吗?

4

2 回答 2

2

无论您将适配器附加到什么,例如 listView,都可以通过将其设置为 null 或其他内容来取消附加。

因此,而不是有问题的代码:

1)。对列表进行排序。2)。然后调用:

mAdapter = new ArrayAdapter<Store>(mContext,
    android.R.layout.simple_list_item_1,
    sortedList);
setListAdapter(mAdapter);

我希望这会有所帮助,因为您的问题仍然有点不清楚。通常,如果您有一个由适配器生成的列表,您不希望手动挖掘列表,因为它是为您自动生成的,这样做会降低其易用性。

于 2013-02-08T01:44:49.253 回答
0

在这里。我的解决方案是坚持我原来的方法,即:如果您想稍微修改列表,但要刷新列表以便更新它并保持滚动位置,那么唯一的方法是clear()重新填充列表。

资料来源:http: //vikinghammer.com/2011/06/17/android-listview-maintain-your-scroll-position-when-you-refresh/

于 2013-02-08T03:14:05.917 回答