基本アクティビティBAを拡張するアクティビティAがある場合、アクティビティAからアクティビティBAの任意の変数に安全にアクセスできます。現在使用しているものには、フラグメントFを含むアクティビティAが含まれています。このフラグメントから、上記と同じ方法でAのすべての変数にアクセスします。そうでない場合は、パブリックメソッドを介して利用できるようにする以外に安全な方法があります。
または、基本アクティビティの変数を基本フラグメントにコピーして、すべてのアクティビティとフラグメントで使用できるようにする方法はありますか。
公式ドキュメントが示唆しているように、それを実装するための良い方法はインターフェースを使用することです。
FragmentがそのActivityまで通信できるようにするには、Fragmentクラスでインターフェースを定義し、それをActivity内に実装します。
したがって、基本的にフラグメント内で次のようなインターフェイスを定義します。
_public interface MyListener {
public void onAction();
}
_
MyListener
型のフィールドを(まだフラグメント内で)定義します
_MyListener mCallback;
_
次に、onAttach(Activity)
メソッドを使用してこのリスナーを設定できます。
_mCallback = (MyListener) activity;
_
これで、フラグメントからアクティビティのメソッドを呼び出すたびに、コールバックを使用できます。
_mCallback.onAction();
_
もちろん、アクティビティはインターフェースを実装する必要があります。そうしないと、アクティビティをMyListenerにキャストするときに例外が発生します。
だから、ただやってください:
_public class MyActivity extends Activity implements MyFragment.MyListener {
@Override
public void onAction() {
// some stuff
}
}
_
詳細については、フラグメント間の通信について documentation を参照してください。
VARIABLE_NAME
がアクティビティACTIVITY_NAME
の変数であり、アクティビティACTIVITY_NAME
の外部からアクセスできる場合
次に、次のコードを使用します。
((ACTIVITY_NAME)this.getActivity()).VARIABLE_NAME //this refers to your fragment