【问题标题】:Access Activity Variables in Fragment [duplicate]访问片段中的活动变量 [重复]
【发布时间】:2017-02-20 20:14:35
【问题描述】:

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

或者有没有一种方法可以将基础活动中的变量复制到基础片段中,以便在所有活动和片段中都可用。

【问题讨论】:

标签: java android android-fragments android-activity android-fragmentactivity


【解决方案1】:

按照官方文档的建议,实现它的一个好方法是使用接口。

要允许 Fragment 与其 Activity 通信,您可以定义 Fragment 类中的一个接口并在 活动。

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

public interface MyListener {
     public void onAction();
}

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

MyListener mCallback;

然后你可以使用onAttach(Activity)方法设置这个监听器:

mCallback = (MyListener) activity;

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

mCallback.onAction();

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

所以,做吧:

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

更多细节请看documentation关于片段之间的通信

【讨论】:

  • 我在上面试过了,但是在这种情况下(即OP的情况),它没用......因为最后你必须在Activity中使用getter方法,所以不需要实现这个接口类型层次结构.当您希望跨片段访问/发送值(即从一个片段到另一个片段)时,您的示例实际上很有用
【解决方案2】:

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

然后使用这个代码:

((ACTIVITY_NAME)this.getActivity()).VARIABLE_NAME //this refers to your fragment

【讨论】:

  • 不适用于最新的appcompat:1.3.1 版本
猜你喜欢
  • 2012-10-15
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多