Androidには画面レイアウトを部品化する仕組みとしてFragmentがある。
レイアウトをFragment化しておけば、タブやボタンタップで画面を切り替えたり、同じレイアウトを複数のアクティビティで共有することが簡単に実装できる……といっても、new演算子で直接インスタンスを作ってはいけないとか、メンバ変数はなるべく使わずにBundleで値を保持するとか、調べなきゃ気付かない約束事が結構多くて、アプリ製作者としてはちょっと扱いづらい面もあるんだけど(笑) この辺の約束事はいつか記事にしたいと思う。
それはともかく、Fragmentクラスは、android.appパッケージとandroid.support.v4.appパッケージの両方にあり、どちらを使っても機能や役割に大きな違いはなかった。
これまでは
Android9.0(Pie)からは、android.appパッケージのFragmentは非推奨となってしまった。即座に使えなくなったわけではないが、将来のアップデートでの動作は保証されない。
なので今後はandroid.support.v4.app.Fragmentを使うことになり、既存のコードも修正して切り替えていかねばならない。
パッケージの切り替えはimport文を書き換えればOKだ。
import android.app.Fragment; ↓↓ import android.support.v4.app.Fragment;
その際の注意点は二点
- Fragmentを配置するActiviyもサポートパッケージのクラスを継承していなければならない。例えばandroid.support.v7.app.AppCompatActivityなどである。
- Fragmentを管理するFragmentManagerは、getSupportFragmentManager()で取得する。(getFragmentManager()も非推奨となった)
それからダイアログで使用するDialogFragmentも同様にandroid.appパッケージが非推奨になってしまった。こちらのandroid.support.v4.appパッケージへの切り替え方法もFragmentと同じである