如何有效刷新ListFragment?

时间:2013-02-08 01:24:57

标签: android android-arrayadapter android-listfragment

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

例如:

ListFragment显示无序:

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

ListFragment display ordered:

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);

“OtherClass”是:

public class OtherClass extends Object {

    public ListArray<Object> list;
    ...
}

相关代码:

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

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

2 个答案:

答案 0 :(得分:2)

无论你将适配器连接到什么地方,比如说listView,都可以通过将其设置为null或其他内容来解除附加。

所以代替有问题的代码:

1)。对列表进行排序。 2)。然后致电:

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

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

答案 1 :(得分:0)

OP在这里。我的解决方案是坚持我的原始方法,即:如果你想略微修改列表,但让列表刷新以便更新并保持滚动位置,那么唯一的方法就是clear()和填写清单。

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