2015-03-25 135 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