android:onClick を利用する

一般的には、ボタン等に対して View.OnClickListener をセットするコードを書く。
しかし、次のような構成のケースでは、別の方法の採用も検討すべきである。

 Activy → Fragment-1 と Fragment-2 を表示している。
 Fragment-1 が表示するボタンのアクションとして、 Fragment-2 や、Activity で実行する処理
 などをする。
  ( これだけなら、View.OnClickListener を使っても getActivity や、
    getFragmentManager を使って事足りる。)
 Fragment-1 は、複数の Fragment に置き換わる、Fragment トランザクション
 頻繁に別の目的の Fragment に入れ替えが発生する。
 しかし、この複数の Fragment で共通のボタンによる処理が必要である。

これらのケースで、View.OnClickListener を各Fragmentのコードに書いていたら
「なんだか、賢くないぞ」
ということで、Fragment が参照するレイアウトXML では、
android:onClick を書いてクリック時の処理を Activity で書く。

例)Fragment が、読み込むレイアウトXML で、
 android:onClick="showPopup" と、ImageButton タグ属性に書いたとする。

Activityの中 で、以下のようにこの ImageButton をアンカー View にした public メソッドを用意する。

public void showPopup(View anchorView){
   PopupMenu popupMenu = new PopupMenu(this, anchorView);
      MenuInflater inflater = popupMenu.getMenuInflater();
      inflater.inflate(R.menu.foo, popupMenu.getMenu());
      popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
         @Override
         public boolean onMenuItemClick(MenuItem item){

            適切に処理して true を返す。

         }
      });
      popupMenu.show();
   }
}
もしも、この showPopup の中で現在の Fragment が何であるか確認したければ、
 getFragmentManager().findFragmentByTag(tagname) 
または、
 getFragmentManager().findFragmentById(R.id.xxx) 
で参照する Fragment に、instanceof 演算子で問い合わせれば、どの Fragment か判定できる。