レイアウトをxmlで生成する2017年07月02日(編集2017年07月02日)TweetAndroidアプリ開発でViewPagerを使うと、スワイプで画面を切り替えるページを作成することができます。この記事は、AndroidアプリでViewPagerの実装方法を記載した記事です。記事の内容を実装したアプリケーションの動画です。ViewPagerViewPagerを使うと、スワイプで画面を切り替えるページを作成することができます。Design以降のUI設計ではあまり利用されなくなりましたが、チュートリアル等の作成でまだ利用されます。FragmentPagerAdapterとの違いFragmentPagerAdapterとViewPagerの違いは、Viewを使うかFragmentを使うかです。FragmentPagerAdapterのソースコードを読むとわかりますが、FragmentPagerAdapterはViewPagerのサブクラスです。Fragmentを使う必要がなければ、ViewPagerを使うほうが良いでしょう。ViewPagerはwrap_contentが使えないので注意してください。アプリ設計この記事のサンプルでは、ViewPagerのviewをxmlで生成し、indicatorライブラリを使ってページ数を表示する画面を作成します。ViewPagerkotlinこの記事のサンプルは、Javaとkotlinの両方で実装します。Studio3未満で利用するには、{project_folder}/build.gradleに次のように記述します。}}kotlinのversionを最新でない1.1.1に指定しているのは、jackOptions(Java8)に対応するためです。続いてapp/build.gradleにも追記します。mavenCentral()}以上で準備は完了です。実装ViewPagerFragmentを実装します。}}kotlinの場合は以下のように実装します。}}kotlinだと20行ほどコードが減ります。レイアウト生成レイアウトの生成は、xmlで行います。PagerAdapterを継承したCustomPagerAdapterクラスのinstantiateItemメソッドでxmlをinflateします。false);LayoutInflater.fromメソッドでLayoutInflaterクラスを取得します。fromメソッドは以下のように実装されています。LayoutInflater;}LayoutInflaterクラスを取得したら、inflateメソッドでviewを取得します。第3引数のattachToRootをfalseにして、xmlで取得するviewをrootにします。attachToRootをtrueにするとrootにaddViewされるので注意してください。temp;}layoutのviewの生成ができたら、findViewByIdメソッドで必要なオブジェクトを取り出しデータを設定します。view追加viewの生成と設定を終えたら、生成したviewをViewGroupに追加して、returnでviewを返します。destroyItemviewを削除するとき、destroyItemメソッドが呼び出されます。destroyItemメソッドは、画面とその両端以外のページを削除します。3ページ目を表示した場合、1ページ目がdestroyItemメソッドで削除されます。isViewFromObjectisViewFromObjectメソッドは、フォーカスや表示の調整のために頻繁に呼び出されます。viewの比較メソッドを記述します。indicatorページindicatorを表示したい場合は、ライブラリを使います。Google純正では用意されていません。このサンプルでは、PageIndicatorViewを使います。build.gradleに以下の追記をします。"0.1.2"}app/build.gradleに以下の追記をします。'@aar'}インストールしたら、レイアウトxmlとコードを実装します。/>Javaを実装します。view.findViewById(R.id.pageIndicatorView);pageIndicatorView.setViewPager(viewPager);kotlinで実装します。view.findViewById<PageIndicatorView>(R.id.pageIndicatorView)pageIndicatorView.setViewPager(viewPager)以上で実装は完了です。ビルド上記のコードの動作を確認してみましょう。ViewPager(kotlin)ページビューが表示されました。結論ViewPagerは枯れた技術ですが、今後も利用するケースは出てくると思います。いえ実装する前に、UIとしてViewPagerを使う必要が本当にあるか考えるようにしましょう。