2017-08-31 17 views
0

我嘗試了很多可能的解決方案,但它們沒有用處,只是我不想用onBackPressed來實現我試圖用Intent回到之前的Activity,我試圖通過putExtra()來通過這個位置,並從上一個活動的意圖中獲取位置並使用​​,但是活動被重新創建,並且滾動不起作用,我也嘗試使用onSavedInstanceState()onRestoreInstanceState但我得到了同樣的結果,任何人都可以給我一個想法?提前致謝。如何保存RecyclerView的最後一個項目位置,當從第二個Activity返回到使用Intent的第一個Activty

我也想知道爲什麼下面的方法不工作?

@Override 
protected void onPause() { 
    super.onPause(); 
    lastFirstVisiblePosition = ((LinearLayoutManager) 
    recyclerView.getLayoutManager()).findLastVisibleItemPosition(); 
    Log.d("bePos", String.valueOf(lastFirstVisiblePosition)); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    Log.d("lastPos", String.valueOf(lastFirstVisiblePosition)); 
    recyclerView.scrollToPosition(lastFirstVisiblePosition); 
} 

更新 我解決了保存的最後一個位置的問題,但後來我發現,我不能滾動到RecyclerView那個位置,因爲我使用分頁RecyclerView只是不能滾動到項目適配器不加載,所以如何解決這樣的問題?

+0

你的邏輯有缺陷,你發送一個意圖啓動一個活動,而不是簡單地把現有的活動帶到前臺,正確的方式是使用'onBackPressed()'你可能嘗試將你的第一個活動設置爲'singleTask'你的清單,如果你堅持發送一個已經在堆棧中運行的活動的意圖。記得'onNewIntent'會被調用,我相信它會是'onNewIntent','onPause','onResume' - 但不要引用我.. –

+0

現在主要的問題不在於保存位置,而是RecyclerView不是在重新創建活動@MarkKeen –

+0

後滾動到該位置,如果其「重新創建」該活動,則其僅具有默認初始化實例變量值的另一實例。 –

回答

0

如果您希望在從正在運行的任務中清除應用程序(殺死)後希望檢索它,請將onSaveInstanceState方法或首選項中的最後一個可見位置保存。我顯示這兩種方法如下:

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     //this is when your activity is not permanent 
     outState.putInt("last_position", lastFirstVisiblePosition); 
     //save permanently 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
     preferences.edit().putInt("last_position", lastFirstVisiblePosition).apply(); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 
     //retrieve your stored item 
     lastFirstVisiblePosition = savedInstanceState.getInt("last_position"); 
     //retrieve any time except your first run 
     //you can add these lines in the onResume if you used the preference method 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
     //use 0 as default 
     lastFirstVisiblePosition = preferences.getInt("last_position", 0); 
    } 

我更喜歡的偏好方法更好的持久性,即使你的任務是殺死你仍然可以找回。

+0

現在位置已保存,但recyclerView不滾動到該位置,我不知道爲什麼? –

+0

使用'((LinearLayoutManager) recyclerView.getLayoutManager())。scrollToPositionWIthOffset(lastFirstVisiblePosition,number_of_pixels);'嘗試它,並給我們結果的效果。這裏有很多關於這方面的信息:https://stackoverflow.com/questions/26875061/scroll-recyclerview-to-show-selected-item-on-top#26876044 –

+0

我之前和之前使用它的問題,以及我認爲這是因爲我正在使用從服務器獲取數據的分頁,而沒有獲取所有數據一次,我對嗎? –

相關問題