これには、次の 2 つのアプローチが考えられます。
前提条件として、画面に表示されているフラグメントのリスト (つまり、このビューが子ビューである可能性がある候補) を反復処理できる必要があります。次に、次のいずれかを実行できます。
View.getParent()
返されたビューがチェックしているフラグメントのルート ビューになるまで、またはビュー階層の最上位に到達するまで、繰り返し呼び出します。例えば
boolean isViewPartOfFragment(View view, Fragment fragment) {
View fragmentRootView = fragment.getView();
while (view != null) {
if (view == fragmentRootView) {
return true;
}
view = (View) view.getParent();
}
return false;
}
または、フラグメントごとに、ルート ビューでfindViewById()
orfindViewByTag()
を呼び出して、ビューがそのビュー階層の一部であるかどうかを確認できます (ただし、これらはツリー検索を実行するため、アプローチが遅くなる可能性があります)。例えば
boolean isViewPartOfFragment2(View view, Fragment fragment) {
Object tag = new Object();
view.setTag(tag); // careful, will overwrite any existing tag!
View foundView = fragment.getView().findViewByTag(tag);
return (view == foundView);
}
これについてもっと考えてみますが、これらの方法のいずれかに頼っているという事実は、最終目標を達成するためのはるかに簡単な方法があることを示唆しています. ビューのどこを設定していますOnClickListener
か?ビューを所有するフラグメント内にリスナーを設定して、直接利用可能なフラグメントへの参照で呼び出されることは可能ですか?