Android:如何在片段和活动之间有效地发送和接收数据?

时间:2017-11-08 06:28:21

标签: android performance android-fragments android-activity

我使用ViewPagerTabLayout在我的活动中使用了两个片段。我想在ActivityFragments之间发送和接收数据。

我不喜欢使用带有static变量的类来解决此问题。有没有更好的方法来完成这项任务而不会浪费大量的内存和资源。因为静态数据成员永远不会在app的整个生命周期中死亡。所以他们从不释放任何大块的记忆。对于在三星设备中运行的应用程序来说,这是一个很大的问题,或者您可以说限制 RAM 的使用的非根设备。

3 个答案:

答案 0 :(得分:3)

使用界面。以下是Android文档的摘录,其中包含有关如何在FragmentActivity之间进行通信的示例的详细信息,反之亦然:Define an Interface

  

要允许Fragment与其Activity进行通信,您可以在Fragment类中定义接口并在Activity中实现它。 Fragment在其onAttach()生命周期方法中捕获接口实现,然后可以调用Interface方法以与Activity通信。

这会使您的Fragment模块化,并允许您在多个活动中重复使用相同的Fragment。您需要做的就是在新interface中实施Activity

答案 1 :(得分:1)

你可以通过两种方式完成。 第一种方法是定义一个接口。 interface example 第二种方法是eventbus。 eventbus library

我的偏好eventbus。即使可能,也要学习rxjava并使用事件逻辑。 Rxjava tutorial

答案 2 :(得分:1)

以下是片段到活动通信的示例:

public class HeadlinesFragment扩展ListFragment {     OnHeadlineSelectedListener mCallback;

// Container Activity must implement this interface
public interface OnHeadlineSelectedListener {
    public void onArticleSelected(int position);
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    // This makes sure that the container activity has implemented
    // the callback interface. If not, it throws an exception
    try {
        mCallback = (OnHeadlineSelectedListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnHeadlineSelectedListener");
    }
}

}