2011-08-23 61 views
6

我有tabView,在每個選項卡中顯示列表。當我在一個標籤中滾動時,切換到另一個標籤並返回到上一個標籤,位置返回到頂部,而不是顯示以前的滾動位置。我如何實現這一目標?需要知道如何使用onSaveInstanceState & onRestoreInstanceState保存位置並使用保存的位置顯示上一個滾動位置。如何在Android中保存和恢復ListView位置

在此先感謝。


謝謝大家的回覆。我嘗試了所有的解決方案,但遇到了其他問題。 基本上我面臨的問題如下。

我有一個listview作爲我的第一個活動,當我啓動我的應用程序。 當我點擊列表項時,它將啓動包含3個選項卡的選項卡活動。 所有3個選項卡使用與ListActivity相同的活動。但3個選項卡包含不同的數據。 我的問題是如何在標籤之間切換時保留列表的位置。通過提供上述解決方案,當我在一個選項卡中更改位置時,它也會影響其餘選項卡。例如,如果我在第一個選項卡中的位置6,此位置將設置爲第二個和第三個選項卡,以及我爲所有3個選項卡使用相同的ListActivity。我不能分享代碼。所以不得不長時間輸入問題。此外,創建的標籤數量也是動態的。它可能是3或4或5.但所有選項卡使用1個ListActivity。

任何人都可以給我一個例子如何實現這一點。 1.單個ListActivity在多個選項卡中使用。 2.在不影響其他選項卡的情況下保留選項卡中的光標位置。

您提供的解決方案值得讚賞。 在此先感謝。

+0

這聽起來像你正在創建一個新的ListView或不知何故,每次切換到標籤時都會更新內容。你可以發佈你的代碼嗎? –

+0

請看下面的文章,這可以幫助你: http://stackoverflow.com/questions/3014089/maintain-save-restore-scroll-position-when-returning-to-a-listview – Xebozone

回答

12

不要在列表視圖上再次調用setAdapter()。做這樣的事情。

if(myListView.getAdapter() == null) 
    myListView.setAdapter(new myAdapter(this, R.layout.row, items)); 

如果您需要在適配器上更新您的ListView調用notifyDataSetChanged()。

10

爲了讓您的ListView的當前位置,你可以調用

int position = mCatchList.getFirstVisiblePosition(); 

然後,一旦你導航回到與ListView的標籤,你可以調用

mCatchList.setSelection(position); 

這將取決於如何您的代碼被寫入以告知位置是否需要添加到savedInstanceState,或者是。

+0

是它可能獲得浮動位置?當我這樣做時,它跳到視圖位置的頂部 –

+0

我相信這是可能的,通過獲得最高的視圖,並找出多少顯示在屏幕上。我沒有這方面的例子,但我敢肯定,快速搜索會帶來一些東西 – hooked82

+0

我發現可以保存它的可預見的對象,並恢復它。 –

1

覆蓋onSaveInstanceState保存位置,並將位置設回onRestoreInstanceState。該包是有點像一個HashMap,(僞代碼):

onSaveInstanceState

bundle.putInt("MyTabsPosition", getPosition()); 

然後在onRestoreInstanceState

pseudo.setPosition(bundle.getInt("MyTabsPosition")); 
相關問題