我正在尝试保持我的最后一个滚动位置并使用新数据但相同的滚动位置填充适配器。在我的场景中,我每5秒钟更新一次可扩展listview
并更新新项目非常5秒,但用户留下最后一个滚动位置。
我已经搜索了很多关于它并找到了一些解决方案,但每次设置滚动位置时它仍然表现得很苛刻。
我试图用这种方法实现它:
activity.runOnUiThread(new Runnable()
{
@Override public void run() {
state = list.onSaveInstanceState();
if(settings != null) {
if (mode.equals("Now")) {
info_panel = new esInfoListAdapter(activity, data, expanHash, false, esActivity.lastgrpPosition);
}
else {
info_panel = new esInfoListAdapter(Activity.this, data, tchildData, true, lastgrpPosition);
}
}
list.setAdapter(info_panel);
if(state != null)
list.onRestoreInstanceState(state);
info_panel.notifyDataSetChanged();
}
}
});
因此,在更新expandable listview
之前调用此方法。所以总之,每五秒钟。我使用Parceable
对象保存list.onSaveInstanceState();
,然后在更新新数据时使用list.onRestoreInstanceState(state);
,但问题有时会起作用,有时却不行吗?我在这里错过了一些技巧吗?谢谢你的帮助。
答案 0 :(得分:0)
我还没有使用ExpandableListView,但我可能会。我认为你应该使用getFirstVisiblePosition,getLastVisiblePosition和getExpandableListPosition等方法的组合。我认为获得groupPosition对用户来说已经足够了。我引用的链接是...get index of first/last visible group in an ExpandableListView