expandablelist视图滚动位置
问题描述:
我正在尝试保留上次滚动的位置,并使用新数据填充适配器,但滚动位置相同。在我的scenerio中,我每5秒更新一次可扩展列表视图,并且更新新项目的时间为5秒,但用户留下最后一个滚动位置。expandablelist视图滚动位置
我已经搜索了很多关于它,发现很少的解决方案,但它仍然表现出strangly每次我设置滚动位置。
我想用这种方法
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();
}
}
});
所以这个方法被刚刚我在每五秒钟更新扩张listview.So总之之前调用来实现它。我使用Parceable对象来保存list.onSaveInstanceState();然后使用list.onRestoreInstanceState(state);更新新的数据
时,但问题是有时工作,有时not..Am这里我错过了一些技巧...
答
我还没有使用ExpandableListView,但是我可能会。我认为你应该使用getFirstVisiblePosition,getLastVisiblePosition和getExpandableListPosition等方法的组合。我认为获得groupPosition对于用户来说已经足够了。我引用的链接是...get index of first/last visible group in an ExpandableListView
你为什么要给你的适配器调用信息面板?这会导致代码不可读。如果您设置了新的适配器,则不需要notifyDatasetChanged。为什么你不保存滚动位置并在之后恢复? – greenapps 2015-03-25 09:39:25
但我怎样才能保存点的滚动位置,我打电话给info_panal,因为我在我的活动中有不同的面板... – user3290805 2015-03-25 09:43:27
您将滚动位置放在变量中并再次使用。我不了解你的不同面板,但如果它们都是适配器,那么将它们称为所有适配器。 – greenapps 2015-03-25 09:49:32