2015-03-25 9 views
0

Я пытаюсь сохранить свою последнюю прокрученную позицию и заполнить адаптер новыми данными, но с той же прокруткой. В моем 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 я не хватает какой-то трюк здесь ...

+0

Почему вы вызываете ваш адаптер информационной панелью? Это вызывает нечитаемый код. notifyDatasetChanged не требуется, если вы устанавливаете новый адаптер. Почему вы не сохраняете позицию прокрутки и не восстанавливаете ее потом? – greenapps

+0

но как я могу сохранить позицию прокрутки, которая является точкой, я называю info_panal, поскольку у меня разные панели в моей деятельности ... – user3290805

+0

Вы помещаете положение прокрутки в переменную и снова используете это. Я не понимаю ваши разные панели, но если они все адаптеры, тогда назовите их всеми адаптерами. – greenapps

ответ

0

Я еще не используется ExpandableListView еще, но я мог бы. Я думаю, вы должны использовать комбинацию методов, таких как getFirstVisiblePosition, getLastVisiblePosition и getExpandableListPosition. Я думаю, что получение groupPosition достаточно для пользователя. Ссылка, на которую я ссылаюсь, - ...get index of first/last visible group in an ExpandableListView

Смежные вопросы