[解決済み] RecyclerView.Stateを使って、RecyclerViewのスクロール位置を保存するには?
2022-07-08 05:54:04
質問
Androidの RecyclerView.State .
RecyclerViewを使用していますが、どのようにRecyclerView.Stateを使用し、バインドすることができますか?
私の目的は、次のとおりです。 RecyclerViewのスクロール位置を保存することです。 .
どのように解決するのですか?
最後に保存した位置を保存するために
RecyclerView.State
?
あなたはいつでも、古き良き保存状態に頼ることができます。拡張
RecyclerView
をオーバーライドし、onSaveInstanceState() と
onRestoreInstanceState()
:
@Override
protected Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
LayoutManager layoutManager = getLayoutManager();
if(layoutManager != null && layoutManager instanceof LinearLayoutManager){
mScrollPosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition();
}
SavedState newState = new SavedState(superState);
newState.mScrollPosition = mScrollPosition;
return newState;
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
super.onRestoreInstanceState(state);
if(state != null && state instanceof SavedState){
mScrollPosition = ((SavedState) state).mScrollPosition;
LayoutManager layoutManager = getLayoutManager();
if(layoutManager != null){
int count = layoutManager.getItemCount();
if(mScrollPosition != RecyclerView.NO_POSITION && mScrollPosition < count){
layoutManager.scrollToPosition(mScrollPosition);
}
}
}
}
static class SavedState extends android.view.View.BaseSavedState {
public int mScrollPosition;
SavedState(Parcel in) {
super(in);
mScrollPosition = in.readInt();
}
SavedState(Parcelable superState) {
super(superState);
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeInt(mScrollPosition);
}
public static final Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
@Override
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
@Override
public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み】RecyclerViewをスクロールして、選択したアイテムを一番上に表示させる。
-
[解決済み] Androidの連絡先リストを呼び出すには?
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] Error:No such property: GROUP for class: org.gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer
-
[解決済み] Android Studio - Lollipop, ADB, & Genymotionの問題。デバイスが表示されない "adb server is out of date... 殺し合い..." 重複] [重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 設定ページに移動せずに位置情報サービスをオンにする
-
[解決済み] android: imageview の画像を画面に合わせて伸縮させる
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] FloatingActionButtonのサンプルとサポートライブラリ
-
[解決済み] Androidでビットマップから円形領域を切り取る方法
-
[解決済み] アンドロイドでビットマップのサイズを変更する最もメモリ効率の良い方法とは?
-
[解決済み] OnScreen KeyboardのDoneキー押下を検出するAndroid
-
[解決済み] サポート(v21)ツールバーを使用した環境設定画面の作成
-
[解決済み] RelativeLayout は LinearLayout よりも高価ですか?
-
[解決済み] Android Studio - Lollipop, ADB, & Genymotionの問題。デバイスが表示されない "adb server is out of date... 殺し合い..." 重複] [重複