web-dev-qa-db-ja.com

フラグメント内からアクティビティメソッドを呼び出す

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

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

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

以前は、Screen1Fragmentはアクティビティであったため、myActivityを拡張して、myMethod()を直接呼び出すことができました。しかし、タブをスライドさせるためにアクティビティをフラグメントに変更する必要がありました。

前もって感謝します。

15
Android Learner

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

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

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

 Activity activity = getActivity();
 if(activity instanceof MyActivity){
      MyActivity myactivity = (MyActivity) activity;
      myactivity.myMethod();
 }
39
Sipka

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

フラグメント内

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

    _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()でメソッドを呼び出すだけの違いは、フラグメントがこの特定のアクティビティとペアになっていないことです。そのため、たとえば電話用とタブレット用など、他のアクティビティで再利用できます。

24
znat

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

    public static void someMethod(){}

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

   MainActivity.someMethod()

ただし、本当に必要なのは、Activityクラスから一部の関数にアクセスすることです。次に、フラグメントビュー作成ツールで次のコードを使用できます。

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

        container.getContext().someMethod();

   }
0
Anson Yao