2013年7月31日水曜日

【Android】ViewPagerで現在表示しているViewを取得する

ViewPagerの上にメニューレイアウトがあったりして
そのメニューレイアウトからViewPagerが表示しているコンテンツに操作を行いたいとき…

例を出すと
ViewPagerといえばギャラリーアプリ的なのを想起しやすいため
そのギャラリーアプリで考えると
メニューから拡大縮小,回転,グレースケール化などなどをする場合
なんてものが挙げられるが

ViewPagerの外からViewPager(実際はPagerAdapterだが)が
管理するコンテンツにアクセスしたいことがある.

各ページにメニューを配置しても実装はできるが…
それはさすがにスマートじゃない.


ViewPagerを使う場合はPagerAdapterのサブクラスを作ることが必須だが,
そのPagerAdapterにはsetPrimaryItemというメソッドがある.
読んで字の通り,アイテムを表示するときに呼ばれるメソッドである.
開発者が気にすることではないのだろうが
きっとViewPagerが呼んでいるのだろう.

instantiateItemメソッドなどと違い,
Abstract指定されていないので継承は必須ではないこのメソッド.
これを使えば表示されているViewの取得ができる.

今回はViewPager直下をRelativeLayoutと仮定する.

こんなかんじで作ってgetPrimaryViewを呼び出してやればいい.

もし,RelativeLayoutの更に下のViewがほしいのなら
もう少し手を加える必要がある.
レイアウトに欲しいViewをsetTagして,
呼び出すときにgetTagすればいい.

getChildAtでも子Viewを取得できるが
きちんと管理していればいいが
コード改修を考えると誰が出てくるか不明瞭なので怖くて使えない.
想定外動作を引き起こすことになる上,
下手したらキャスト失敗で死ぬことになるからね.

0 件のコメント:

コメントを投稿