0

我有一個列表片段。Android的listfragment滾動到頂部

當用戶點擊列表項時,我用新聞片段替換列表片段。 當用戶回來(使用addToBackStack)時,列表滾動到頂部。

我想我的列表保持在相同的滾動水平,當用戶按下列表item..is那可能嗎?我怎麼能得到這個結果?

這是我的代碼,我更換名單片段:

myFragment myFragment = new myFragment(); 

    myFragment.setArguments(bundle); 
       FragmentTransaction ft = getActivity().getSupportFragmentManager() 
         .beginTransaction(); 
       ft.replace(R.id.phone_container, myFragment); 
       ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
       ft.addToBackStack(null); 
       ft.commit(); 

我已經試過這樣的事情,但我沒有得到任何結果:

public void onResume() { 
    super.onResume(); 
    Log.i("log", "onResume()"); 

     setListAdapter(adapter); 
     if(index!=-1){ 
     this.getListView().setSelectionFromTop(index, top); 
     } 
} 

public void onPause() { 
    super.onPause(); 
    Log.i("log", "onPause()"); 
    try { 
     index = this.getListView().getFirstVisiblePosition(); 
     View v = this.getListView().getChildAt(0); 
     top = (v == null) ? 0 : v.getTop(); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
    } 
} 
+0

不是它的重複。 – DArkO

回答

0

當您從視圖層次結構的片段你實際上破壞了視圖而不是碎片。所以當它重新連接時再次調用onCreateView。這就是爲什麼你的列表再次滾動到頂部。

保存狀態的方法是將其存儲在實例變量中,然後再次使用onCreateView作爲代碼滾動到最後一個位置(在適配器被填充之後)。

這可能對更多細節有用。 How can I maintain fragment state when added to the back stack?

+0

我可以爲此提供一些代碼嗎? :) –

+0

我不能寫你需要的特定代碼。但很簡單,您已經將索引保存在onResume方法中。只需等待數據加載到列表中,然後使用適配器恢復它,而不是使用onResume()。最初,您的索引值爲0.只需按照您希望在首次顯示屏幕時加載到特定索引的方式編寫索引。 – DArkO

+0

其實,當我回到我的listView時,我可以看到列表項中的小圖像閃爍一秒。這是否意味着什麼? –