woshidan's blog

あいとゆうきとITと、とっておきの話。

FragmentPagerAdapterをおいたActivityから現在表示されているFragmentを取得したい

FragmentPagerAdapterを使って画面の一部だけを遷移させていくとき、その中の1つの画面から他のアプリ等にstartActivityForResultIntentを飛ばして連携したい部分がありました。

FragmentonActivityForResult()メソッドってあったかしら、というところから戸惑ったのですが、FragmentにもonActivityForResult()メソッドはあります。

ActivityonActivityForResult()からFragmentを指定して呼びだしてあげればよいです。

じゃあ、FragmentPagerAdapterでいま表示してるFragmentってどう指定するの...って調べたら下記が出てきたのでメモ。

stackoverflow.com

FragmentPagerAdapterではFragmentと追加するとき、下記のようにFragmentにつけるタグの名前を生成しているそうで、このタグを利用すればよいようです。

private static String makeFragmentName(int viewPagerId, int index) {
     return "android:switcher:" + viewPagerId + ":" + index;
}

なお、FragmentManager#findFragmentByTag()を使い、FragmentPagerAdaptergetItem(int position)は基本的に指定した位置に設定されているFragmentのクラスの新しいインスタンスを生成して返すので注意。