如果我有一个扩展基本 Activity BA 的 Activity A,那么我可以安全地从 Activity A 访问 Activity BA 中的任何变量。我现在使用的内容包含一个 Activity A,其中包含一个 fragment F。
现在从这个 fragment 我想以相同的方式访问 A 的所有变量,就像我在上面所做的那样,如果没有,除了通过公共(public)方法使其可用之外,还有一种安全的方法可以做到这一点。
或者有没有一种方法可以将基本 Activity 中的变量复制到基本 fragment ,以便它在所有 Activity 和 fragment 中可用。
正如官方文档所建议的那样,实现它的一个好方法是使用接口(interface)。
To allow a Fragment to communicate up to its Activity, you can define
an interface in the Fragment class and implement it within the
Activity.
所以,基本上在你的 fragment 中你定义了一个这样的接口(interface):
public interface MyListener {
public void onAction();
}
并定义(仍在 fragment 中)类型为 MyListener
的字段
MyListener mCallback;
然后你可以使用 onAttach(Activity)
方法设置这个监听器:
mCallback = (MyListener) activity;
现在,每次您想从 fragment 中调用 Activity 中的一个方法时,您都可以使用回调:
mCallback.onAction();
当然,您的 Activity 需要实现该接口(interface),否则在将 Activity 转换为 MyListener 时会出现异常。
所以,就这样做:
public class MyActivity extends Activity implements MyFragment.MyListener {
@Override
public void onAction() {
// some stuff
}
}
有关更多详细信息,请查看 documentation关于 fragment 之间的通信