3

私のmain.xmlレイアウトには、フラグメント プレースホルダー<FrameLayout>である要素があります。

main.xml:

<FrameLayout
        android:id="@+id/fragment_placeholder"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

上記にプログラムでFragment を追加するには、次のよう<FrameLayout>にします。

fragmentTransaction.add(R.id.fragment_placeholder, fragment, null);

次に、を使用しreplace()て他のフラグメントに変更できます。

fragmentTransaction.replace(R.id.fragment_placeholder, otherFragment, null);

プロジェクトのある時点で、現在表示されている fragment を取得し、ビュー上のすべてを無効にする必要があります。最初に、次の方法で現在表示されているフラグメントを正常に取得します。

Fragment currentFragment = fragmentManager.findFragmentById(R.id.fragment_placeholder); 

次に、フラグメントのビューを無効にするにはどうすればよいですか? ビューにはボタンがある可能性がありますが、ビュー全体を無効にすることはできますか? 不可能な場合、ビューにオーバーレイを追加するにはどうすればよいですか?

私は試した:

currentFragment.getView().setEnabled(false); 

しかし、それは機能しません。ビューのボタンをクリックすることはできます。

4

2 に答える 2

9

As per @Georgy's comment, here is a copy of the answer from Disable the touch events for all the views (credit to @peceps).


Here is a function for disabling all child views of some view group:

 /**
   * Enables/Disables all child views in a view group.
   * 
   * @param viewGroup the view group
   * @param enabled <code>true</code> to enable, <code>false</code> to disable
   * the views.
   */
  public static void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) {
    int childCount = viewGroup.getChildCount();
    for (int i = 0; i < childCount; i++) {
      View view = viewGroup.getChildAt(i);
      view.setEnabled(enabled);
      if (view instanceof ViewGroup) {
        enableDisableViewGroup((ViewGroup) view, enabled);
      }
    }
  }

You can call this passing in your Fragment's view as retrieved by Fragment.getView(). Assuming that your fragment's view is a ViewGroup.

于 2012-11-01T13:26:40.067 に答える