访问片段中的活动变量

Jud*_*des 6 java android android-fragments android-activity android-fragmentactivity

如果我有一个扩展基本活动BA的活动A,那么我能够安全地从活动A访问活动BA中的任何变量.我现在使用的是包含片段F的活动A.现在从这个片段我想要以同样的方式访问A的所有变量,就像我上面所做的那样,如果没有,除了通过公共方法使其可用之外,还有一种安全的方法.

或者有没有办法可以将基本活动中的变量复制到基本片段,以便在所有活动和片段中都可用.

GVi*_*i82 6

正如官方文档所建议的那样,实现它的一个好方法是使用接口。

为了允许 Fragment 与其 Activity 通信,您可以在 Fragment 类中定义一个接口并在 Activity 中实现它。

所以,基本上在你的片段中你定义了一个这样的接口:

public interface MyListener {
     public void onAction();
}
Run Code Online (Sandbox Code Playgroud)

并定义(仍在片段中)一个类型的字段 MyListener

MyListener mCallback;
Run Code Online (Sandbox Code Playgroud)

然后您可以使用以下onAttach(Activity)方法设置此侦听器:

mCallback = (MyListener) activity;
Run Code Online (Sandbox Code Playgroud)

现在,每次您想从片段调用活动中的方法时,您都可以使用回调:

mCallback.onAction();
Run Code Online (Sandbox Code Playgroud)

当然,您的 Activity 需要实现该接口,否则将您的 Activity 投射到 MyListener 时会出现异常。

所以,只要这样做:

public class MyActivity extends Activity implements MyFragment.MyListener {
    @Override
    public void onAction() {
        // some stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看有关片段之间通信的文档


Ate*_*res 4

如果VARIABLE_NAME是您活动中的变量ACTIVITY_NAME,可以从外部活动访问ACTIVITY_NAME

然后使用这段代码:

((ACTIVITY_NAME)this.getActivity()).VARIABLE_NAME //this refers to your fragment
Run Code Online (Sandbox Code Playgroud)