FragmentからFragmentに通知したり、Fragmentから別のFragmentのメソッドを呼ぶのに、Fragment.setTargetFragmentを使って、あらかじめ自身のFragmentを登録しておくという処理をする。
strings.xmlで、
TextViewとButton2個ずつ。
fragment1_main.xmlで、
TextViewとButtonを用意。
fragment2_main.xmlも、
同様。
activity_main.xmlは、
FrameLayoutだけ。
Fragment1.javaは、
Buttonを押されたら、Fragment2をadd。
Fragment2.newInstanceにthisを渡すようになっているのがポイント。
customMethodをFragment2から呼び出したい。
Fragment2.javaは、
newInstanceの中で引数のtargetをfragment2.setTargetFragmentで登録。
このtargetはFragment1だから、これを取り出せたら、Fragment1を操作できる。
Fragment2のButtonが押されたら、getTargetFragmentでtargetFragmentとして取り出すことが出来る。
Fragment1にキャストが必要なのが面倒だが、fragment1.customMethodを呼び出せる。
MainActivity.javaは、
起動時、Fragment1を追加。
起動時。
Button1を押すと、
Fragment2が上に被さる。(addなのでこうなっちゃう。)
今度はButton2を押すと、
customMethodを呼び出せた。
Sample/android/Fragment/setTargetFragment/src/Fragment at master · bg1bgst333/Sample · GitHub