LoginSignup
0
0

More than 3 years have passed since last update.

FlutterFragmentのためにViewPager2を改造する

Last updated at Posted at 2020-07-30

前回の記事
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を取り込みたいプロジェクトにライブラリモジュールを追加します。

プロジェクトのルート要素で右クリックします。

スクリーンショット 2020-07-31 4.03.40.png

Android Libraryを選択します。

スクリーンショット 2020-07-31 4.04.00.png

モジュール名とパッケージ名を指定します。

image.png

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を書き換える

まず、リソースファイルのパッケージ名が違くてビルドできないので修正します。

ViewPager2.java
// import androidx.viewpager2.R;
import com.tfandkusu.myviewpager2.R;

問題のsetMaxLifecycleメソッド呼び出し部分をコメントアウトします。3カ所あります。

FragmentStateAdapter.java
                mFragmentManager.beginTransaction()
                        .add(fragment, "f" + holder.getItemId())
                        // .setMaxLifecycle(fragment, STARTED)
                        .commitNow();

ViewPager2を使用するモジュールからのモジュール取り込みを設定します。

build.gradle
// 略
dependencies {
    // 今回作ったライブラリモジュール
    implementation project(':myviewpager2')
    // クラス名が一緒なので本家の取り込みはコメントアウトする
    // implementation "androidx.viewpager2:viewpager2:1.0.0"
}

あとは通常のViewPager2と同じように使えば良いです。

できあがり

https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_334798_30d1768e-ced2-4c80-174d-f8a87d2d3075.gif

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0