【问题标题】:Reference Fragment/AppCompatActivity from FragmentActivity从 FragmentActivity 引用 Fragment/AppCompatActivity
【发布时间】:2019-01-31 23:30:52
【问题描述】:

问题 在 FragmentActivity 中,如何访问对 Fragment 或 AppCompatActivity 的引用?

场景 我的应用程序具有允许在片段之间切换的选项卡。每个选项卡都有一个按钮,该按钮转换为只能从该选项卡访问的视图(单击后)。

public class MainActivity extends AppCompatActivity{
 private class (on)SectionPageAdapter extends FragmentPageAdataper{
  ...
  @Override public Fragment getItem(int position){
    ...
    F1 f1 = new F1();
    return f1;  
   }
 }
}

public class F1 extends Fragment{
...
 void onIntent(){
  ...
  Intent intent = new Intent(this.getActivity(), AccountTransition.class);
  this.startActivity(intent);
 }
}


public class F2 extends FragmentActivity{
 //how can i gain access to a reference from F1 class or MainActivity class?
}

【问题讨论】:

  • 意图发生后,我在 FragmentActivity 中。如何访问对启动 Intent 的 Fragment 类的引用,或对作为应用程序顶级 Activity 的 AppCompatActivity 类的引用?

标签: java android android-fragments android-intent


【解决方案1】:

您不应该尝试获取对 Activity 的引用,这会导致内存泄漏并使代码更加脆弱。

您应该研究Activities 之间的通信方式,例如使用BroadcastReceiver 或EventBus。

https://developer.android.com/reference/android/content/BroadcastReceiver

如果你想要更简单的东西,我会推荐EventBus。 https://github.com/greenrobot/EventBus

这是一个快速示例,说明如何使用 EventBus 在两个 Activities 之间发送数据而无需任何引用。

MainActivity.java

public class MainActivity extends AppCompatActivity{

    @Subscribe()
    public void onMessageEvent(MessageEvent event) {
        // Show the message.
    }
}

F2.java

public class F2 extends FragmentActivity{

    // Sending "Hello from F2" to anyone listening.
    public void sendMessage() {
        MessageEvent event = new MessageEvent("Hello from F2");
        EventBus.getDefault().post(event);
    }
}

【讨论】:

  • 参考 SO:event-bus/static-var, practive 是使用 BroadcastReceiver 方法或 EventBus 方法获得我所寻求的唯一方法吗? *从 F2 引用 MainActivity(在 F1 执行 Intent 之后)?
  • @EvOlaNdLuPiZ 我觉得这个问题略有不同。他们试图处理生命周期并使用 EventBus 而不是 Intents。这不是我的建议。你应该同时使用两者。我强烈建议不要尝试引用另一个 Activity,因为这只会导致问题和糟糕的代码。但是,它们确实会显示 startActivityForResult,如果您只是想从 F2 返回结果,这可能会起作用。
猜你喜欢
  • 2014-11-11
  • 2013-06-06
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
相关资源
最近更新 更多