来自FragmentActivity的参考Fragment / AppCompatActivity

时间:2019-01-31 23:30:52

标签: java android android-fragments android-intent

问题 在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?
}

enter image description here

1 个答案:

答案 0 :(得分:1)

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

您应该研究Activities之间的通信方式,例如使用BroadcastReceiverEventBus

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

如果您想简单一些,我建议使用EventBushttps://github.com/greenrobot/EventBus

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

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);
    }
}