FlutterFragmentのためにViewPager2を改造する
前回の記事
FlutterFragmentとViewPagerの組み合わせはonResumeのタイミングで難しかった
では、ViewPager2はページが完全遷移するまではonResumeが呼ばれないので、初回のonResumeで描画するFlutterFragmentとは相性が悪いという説明をしました。
よってすぐにonResumeが呼ばれるようにViewPager2を書き換えてみようと思います。setMaxLifecycleメソッドの呼び出しが問題なので該当部分をコメントアウトします。
Android Jetpack ソースコードのダウンロード
ViewPager2はAndroid Jetpackの一部分なのでAndroid Jetpackのソースコードをダウンロードします。
公式のダウンロード方法解説(英語)
Qiitaに日本語の解説もあります。
AndroidX をソースからビルドする
ダウンロードすると15GBになります。
注意点
多くの人はライブラリについて安定版の最新版(執筆時点ではバージョン1.0.0)を使うと思いますが、こうしてダウンロードしたバージョンはアルファ版(執筆時点ではバージョン1.1.0-alpha01)になっていると思います。バージョンを指定してダウンロードする方法は見つけられませんでした。
ライブラリモジュールを作成する
改造したViewPager2を取り込みたいプロジェクトにライブラリモジュールを追加します。
プロジェクトのルート要素で右クリックします。
Android Libraryを選択します。
モジュール名とパッケージ名を指定します。
ViewPager2のソースコードをライブラリモジュールに追加する
このようなディレクトリ構成を想定します。
~/work/androidx-master-dev
ダウンロードしたAndroid Jetpackのソースコード
~/work/quickecho
改造したViewPager2を含めたいアプリプロジェクト
cd work/androidx-master-dev/frameworks/support/viewpager2
# Javaソースコードをコピーする
cp -r viewpager2/src/main/java/androidx ~/work/quickecho/myviewpager2/src/main/java/
# リソースファイルをコピーする
cp -r viewpager2/src/main/res ~/work/quickecho/myviewpager2/src/main/
ViewPager2を書き換える
まず、リソースファイルのパッケージ名が違くてビルドできないので修正します。
// import androidx.viewpager2.R;
import com.tfandkusu.myviewpager2.R;
問題のsetMaxLifecycleメソッド呼び出し部分をコメントアウトします。3カ所あります。
mFragmentManager.beginTransaction()
.add(fragment, "f" + holder.getItemId())
// .setMaxLifecycle(fragment, STARTED)
.commitNow();
ViewPager2を使用するモジュールからのモジュール取り込みを設定します。
// 略
dependencies {
// 今回作ったライブラリモジュール
implementation project(':myviewpager2')
// クラス名が一緒なので本家の取り込みはコメントアウトする
// implementation "androidx.viewpager2:viewpager2:1.0.0"
}
あとは通常のViewPager2と同じように使えば良いです。
できあがり
Author And Source
この問題について(FlutterFragmentのためにViewPager2を改造する), 我々は、より多くの情報をここで見つけました https://qiita.com/tfandkusu/items/a8799ca0d40664707c0f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .