2015-03-25 136 views
0

我正在尝试保留上次滚动的位置,并使用新数据填充适配器,但滚动位置相同。在我的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这里我错过了一些技巧...

+0

你为什么要给你的适配器调用信息面板?这会导致代码不可读。如果您设置了新的适配器,则不需要notifyDatasetChanged。为什么你不保存滚动位置并在之后恢复? – greenapps 2015-03-25 09:39:25

+0

但我怎样才能保存点的滚动位置,我打电话给info_panal,因为我在我的活动中有不同的面板... – user3290805 2015-03-25 09:43:27

+0

您将滚动位置放在变量中并再次使用。我不了解你的不同面板,但如果它们都是适配器,那么将它们称为所有适配器。 – greenapps 2015-03-25 09:49:32

回答

0

我还没有使用ExpandableListView,但是我可能会。我认为你应该使用getFirstVisiblePosition,getLastVisiblePosition和getExpandableListPosition等方法的组合。我认为获得groupPosition对于用户来说已经足够了。我引用的链接是...get index of first/last visible group in an ExpandableListView