こんにちは、まっさん(@Tera_Msaki)です。
この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaでの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これからAndroidのアプリ開発やJavaでの開発を始めたい方への案内は、記事の最後で紹介します)
スクロール位置を保持した状態でRecyclerViewを再表示する
ListViewでスクロール位置を保持する方法はこちらです↓↓↓
USB電源が足りなくて、困っている人におすすめ♪
◎ポイント
Andoridアプリの開発で、
リスト表示する場合に、RecyclerViewを使用することが多いと思います。
アイテムの削除や画面遷移などで RecyclerView を再表示させた場合、
スクロール位置がリセットされます。
開発者からすると当たり前の動作ですが、
削除 や画面遷移の度にスクロール位置がリセットされると、
操作性が著しく低下します。
スクロール位置を保持して状態で、RecyclerViewを再表示する仕組みを実装します。

OKボタンを押すと、リストを再描画する必要があります。
RecyclerView
RecyclerViewはListViewがリスト選択(タップ)に特化した
子画面(ダイアログ)向けのライブラリに対して、
リスト選択以外の操作(スワイプやドラッグ&ドロップ)が可能な
親画面(Activity やFragment)向けのライブラリです。
スクロール位置を取得する
RecyclerView(motionView)の setOnItemClickListener で
アイテムの選択(タップ)をフックし、
LinearLayoutManagerのfindFirstVisibleItemPosition を使用して、
リスト表示している一番上のアイテムの位置を取得します。
private int motionPos = 0;
:
motionView.setOnItemClickListener((view, position) -> {
// スクロール位置取得
LinearLayoutManager layoutManager = (LinearLayoutManager) motionView.getLayoutManager();
if (layoutManager != null)
motionPos = layoutManager.findFirstVisibleItemPosition();
else
motionPos = 0;
:
スクロール位置を保持した状態でRecyclerViewを表示する
scrollToPositionWithOffset を使用して、RecyclerView をスクロールさせます。
:
LinearLayoutManager layoutManager = (LinearLayoutManager) motionView.getLayoutManager();
if (layoutManager != null)
layoutManager.scrollToPositionWithOffset(motionPos, 0);
:
Activity間で画面遷移する場合
スクロール位置をBundle に保持します。
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Bundle取得
Intent intent = getIntent();
if (intent.getExtras() != null) {
RestoreCondition(intent.getExtras());
}
:
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
SaveCondition(outState);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (DEBUG) Log.d(TAG, "onRestoreInstanceState");
RestoreCondition(savedInstanceState);
}
:
// Bundle操作 //
private Bundle SaveCondition(Bundle bundle) {
:
bundle.putString("motionPos",String.valueOf(motionPos));
return bundle;
}
private void RestoreCondition(Bundle bundle) {
:
motionPos = Integer.parseInt(bundle.getString("motionPos"));
}
今回は、ここまでです。
RecyclerViewでスクロール位置を保持する方法を使用しているAndroidアプリです。
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
初めての Android のアプリ開発では、アプリケーション開発経験がない方や、
アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、
書籍などによる独学ではアプリ開発できるようになるには、
かなりの時間がかかりますので、オンラインスクールでの習得をおススメします。
副業でアプリケーション開発と考えているなら、おススメです。
無料説明会に参加して、話を聞くだけでもためになるよ♪

ITスキルを身に付け、キャリアアップ。オンライン授業で仕事と両立できます。
まずは資料請求から♪
未経験者からシステムエンジニアを目指すのに最適かと、
まずは無料相談から♪

無料でJava言語を学べるのは、かなり魅力的♪
でも、応募資格は35歳以下です、、、
2022年12月から説明会が土曜日開催が追加されていますよ♪
説明会では、希望者に対してプログラミング体験もできるよ♪

未経験者からプログラマーを目指すのに最適かと、
まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています、
お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適かと、
まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪
コメント欄