1. ホーム
  2. android

2つのフラグメント間の基本的な通信

2023-09-16 06:21:08

質問

私は1つのアクティビティ MainActivity . このアクティビティには2つのフラグメントがあり、両方ともxml内で宣言的に作成されました。

を渡そうとしています。 String に入力されたテキストを Fragment A のテキストビューに Fragment B . しかし、これは非常に困難であることが判明しています。どなたか、これを実現する方法をご存知でしょうか?

私は、フラグメントが、そのアクティビティへの参照を getActivity() . だから、私はそこから始めると思います?

どのように解決するのですか?

Androidの開発者向けページを見てください。 http://developer.android.com/training/basics/fragments/communicating.html#DefineInterface

基本的には、フラグメントAでインターフェースを定義し、Activityにそのインターフェースを実装させます。フラグメントの中でインターフェースのメソッドを呼び出すと、アクティビティがイベントを受け取ります。アクティビティでは、2番目のフラグメントを呼び出して、受け取った値でtextviewを更新することができます。

あなたのActivityはあなたのインターフェースを実装しています(下記FragmentA参照)

public class YourActivity implements FragmentA.TextClicked{
    @Override
    public void sendText(String text){
        // Get Fragment B
        FraB frag = (FragB)
            getSupportFragmentManager().findFragmentById(R.id.fragment_b);
        frag.updateText(text);
    }
}

フラグメントAはインターフェースを定義し、必要なときにメソッドを呼び出します。

public class FragA extends Fragment{

    TextClicked mCallback;

    public interface TextClicked{
        public void sendText(String text);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (TextClicked) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                + " must implement TextClicked");
        }
    }

    public void someMethod(){
        mCallback.sendText("YOUR TEXT");
    }

    @Override
    public void onDetach() {
        mCallback = null; // => avoid leaking, thanks @Deepscorn
        super.onDetach();
    }
}

フラグメントBは、テキストに対して何かを行うためのパブリックメソッドを持っています。

public class FragB extends Fragment{

    public void updateText(String text){
        // Here you have it
    }
}