18

フラグメント画面からアクティビティのメソッドを呼び出そうとしています。

MyActivity というアクティビティにある myMethod() というメソッドがあります。Screen1Fragment というフラグメントがあります。

Screen1Fragment 内から MyActivity.myMethod() を呼び出したいのですが、これを行う方法がわかりません。

以前は Screen1Fragment はアクティビティだったので、myMethod() を直接呼び出せるように MyActivity を拡張していました。しかし、スライド タブを使用するには、アクティビティをフラグメントに変更する必要がありました。

前もって感謝します。

4

3 に答える 3

46

getActivity()フラグメントで使用します。

MyActivity activity = (MyActivity) getActivity();
activity.myMethod();

フラグメントが MyActivity にアタッチされているかどうかわからない場合は、

 Activity activity = getActivity();
 if(activity instanceof MyActivity){
      MyActivity myactivity = (MyActivity) activity;
      myactivity.myMethod();
 }
于 2013-11-01T12:26:37.610 に答える
28

フラグメントをアタッチするアクティビティから完全に独立させる必要があります。フラグメントのポイントは、さまざまなアクティビティでさまざまなコンテキストで再利用できることです。それを達成し、アクティビティからメソッドを呼び出すことができるようにするには、公式ドキュメントで推奨されている次のパターンを使用します。

あなたのフラグメントで

  • メソッドでパブリック インターフェイスを定義する

    public interface MyFragmentCallback{
        public void theMethod();
    }
    
  • フィールドを定義し、キャスト参照を取得します。

    private MyFragmentCallback callback;
    public void onAttach(Activity activity){
        callback = (MyFragmentCallback) activity
        super.onAttach(activity);
    }
    

あなたのアクティビティで

  • MyFragmentCallbackクラス定義で実装します。
  • アクティビティに実装theMethod()します (Eclipse からそうするように求められます)。

次に、フラグメントから呼び出すことができますcallBack.theMethod()

これと単純に getActivity() でメソッドを呼び出すこととの違いは、フラグメントがこの特定のアクティビティとペアになっていないことです。したがって、たとえば電話用とタブレット用など、他のアクティビティで再利用できます。

于 2013-11-01T13:20:08.847 に答える
0

メソッドが MainActivity の静的メソッドである場合は、次のようになります。

    public static void someMethod(){}

次に、それは非常に簡単です。電話するだけ

   MainActivity.someMethod()

しかし、あなたが本当に望んでいるのは、Activity クラスからいくつかの関数にアクセスすることだと思います。次に、フラグメントビュークリエーターで次のコードを使用できます

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState){

        container.getContext().someMethod();

   }
于 2013-11-01T13:06:54.080 に答える