0

特定のビュー (ボタンなど) がフラグメントに属しているかどうかを確認する方法はありますか? View.getContext()アクティビティを提供し、フラグメントには独自のコンテキストがありません。ただし、ボタンがフラグメントの一部であるかどうかを確認し、フラグメントの名前やクラスなどを取得するには、何らかの回避策が必要です。

ユースケース: AView.OnClickListenerは のビューを提供してくれますonClick(View view)。これで、このビュー オブジェクトに関するほとんどすべてを見つけることができます。そのタイプ (ボタンなど)、そのリソース ID、XML ファイルからのそのリソース名でさえ、アクティビティ コンテキストを使用して解決できます。ただし、ビューがフラグメントの一部なのか、それともアクティビティ内に直接あるかを確認する方法はありません。

4

2 に答える 2

2

これには、次の 2 つのアプローチが考えられます。

前提条件として、画面に表示されているフラグメントのリスト (つまり、このビューが子ビューである可能性がある候補) を反復処理できる必要があります。次に、次のいずれかを実行できます。

  1. 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;
    }
    
  2. または、フラグメントごとに、ルート ビューで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か?ビューを所有するフラグメント内にリスナーを設定して、直接利用可能なフラグメントへの参照で呼び出されることは可能ですか?

于 2013-07-24T12:43:31.053 に答える
0

これを介してその親を取得できます

yourView.getParent()

http://developer.android.com/reference/android/view/View.html#getParent()

于 2013-07-24T11:33:55.827 に答える