2017-10-23 11 views
4

私が解決しようとしているAndroidアップナビゲーションでこの問題を解決する方法についてご意見をお聞きしたいと思います。 私はRecycleViewでアクティビティ(MainActivity)を持っており、APIからフェッチされている項目のスクロール可能なリストを示しています。リサイクルビューでナビを開く

Intent intent = new Intent(context, DetailActivity.class); 
intent.putExtra("item", item); 
context.startActivity(intent); 

DetailActivityは、ユーザーが以前の活動に戻ることができUpボタンを、持っている:そのように各項目は、アイテムの詳細活動を開き、onclickのリスナーを持っています。ここではマニフェストは、この活動のためです:

<activity 
    android:name=".DetailActivity" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme.Base" 
    android:parentActivityName=".MainActivity"> 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value=".MainActivity" /> 
</activity> 

そして、ここが問題だ:私は親アクティビティに移動したときに、スクロールリストがリセットされ、一番上にあります。デバイスの戻るボタンを使用すると、リストは保持され、スクロール位置は残っていますが、上ボタンをクリックしても表示されません。

スクロールリストを復元するには、すでにロードされているアイテムのリストをどこかに保持して、DetailActivityに渡して戻すことができますが、これが最良の解決策であるとは確信していません。 スクロールアイテムとスクロール位置を保持する、 ?上のナビゲーションについてAndroid documentationを読んだが、答えを見つけることができなかった。

答えて

4

押すと "BACKが"見えるものあなたのアプリでodを実行して、単に「UP」を捕まえる - イベント:

+0

これはまさに私が探していたものです。ありがとう! :) – Oleg

0

私のリストのために、これは私がインデックスを保存し、そのインデックスでRecyclerViewを復元する方法であるトップ):

// save index and top position 
int index = mList.getFirstVisiblePosition(); 

View v = mList.getChildAt(0); 
int top = (v == null) ? 0 : (v.getTop() - mList.getPaddingTop()); 

// ... 

// restore index and position 
mList.setSelectionFromTop(index, top); 

クレジット:イアン(スタックオーバーフロー)

は、アプリの重すぎるだろう、すでにロードされた項目のサブリストを維持...

+0

どのようにリストアイテムを復元しますか?彼らはいつもそこにいますか?私の場合、APIから20個のアイテムを取り出しているので、ユーザーがアイテム番号500にスクロールすると、ユーザーがナビゲートするときに500 + 20個のアイテムをフェッチする必要があります。 – Oleg

+0

Recycler Viewはアクティビティに表示されている最上位のアイテムと最後のアイテムにリストアします。 –

+1

私は解決策として他の回答をマークしました。位置を計算する必要なしに、押し戻すようにリストをまるで元の状態に戻すように見えます。これまでのところ、さまざまなデバイスでテストする必要があります。 – Oleg

関連する問題