2017-08-31 7 views
0

私は可能な解決策をたくさん試しましたが、有用ではありませんでした。私は前のActivityを使って前のページに戻ろうとしていますが、putExtra()でその位置を渡して、前のアクティビティのインテントから位置を取得して​​を使用しようとしましたが、アクティビティが再作成され、私はまたonSavedInstanceState()onRestoreInstanceStateを使用しようとしましたが、私は同じ結果を得ました、いずれか私にアイデアを与えることができますか?前もって感謝します。2番目のアクティビティからインテントを使用して最初のアクティティに戻るときにRecyclerViewの最後のアイテムの位置を保存する方法

また、以下の方法が機能していないのはなぜですか?

@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()'を使用しています。すでに実行中のアクティビティのインテントをスタックに送信することを主張する場合は、マニフェストを使用します。 '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

私はそれを以前に使っていましたが、同じ問題がありました。私はこれが起こっていると思う私はサーバーからデータをフェッチし、すべてのデータを一度フェッチしないと、これと私は右ですか? –

関連する問題