Я пытаюсь сохранить свою последнюю прокрученную позицию и заполнить адаптер новыми данными, но с той же прокруткой. В моем scenerio я обновляю расширяемый список каждые 5 секунд и обновляю новинки очень 5 секунд, но с последней прокруткой позиции, оставленной пользователем.expandablelist view прокрутить позицию
Я искал много об этом и нашел несколько решений, но все же он ведет себя странно каждый раз, когда я устанавливаю положение прокрутки.
Я пытаюсь добиться этого с помощью этого метода
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 (состояние); при обновлении новых данных
но проблема иногда это работает, а иногда not..Am я не хватает какой-то трюк здесь ...
Почему вы вызываете ваш адаптер информационной панелью? Это вызывает нечитаемый код. notifyDatasetChanged не требуется, если вы устанавливаете новый адаптер. Почему вы не сохраняете позицию прокрутки и не восстанавливаете ее потом? – greenapps
но как я могу сохранить позицию прокрутки, которая является точкой, я называю info_panal, поскольку у меня разные панели в моей деятельности ... – user3290805
Вы помещаете положение прокрутки в переменную и снова используете это. Я не понимаю ваши разные панели, но если они все адаптеры, тогда назовите их всеми адаптерами. – greenapps