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

Android:如何在片段和活动之间高效地发送和接收数据?,android,performance,android-fragments,android-activity,Android,Performance,Android Fragments,Android Activity,我在活动中使用了两个片段,分别是ViewPager和TabLayout。我想在我的活动和我的片段之间发送和接收数据 我不喜欢使用带有static变量的类来解决这个问题。有没有更好的方法来完成这项任务而不损失太多内存和资源。因为静态数据成员在应用程序的整个生命周期中都不会死亡。所以他们从不释放任何内存块。这对于应用程序在三星设备上运行来说是一个大问题,或者你可以说非根设备限制了RAM的使用 使用接口。下面是Android doc的一个摘录,其中包含了有关如何在片段和活动之间进行通信以及如何在活动和

我在活动中使用了两个片段,分别是
ViewPager
TabLayout
。我想在我的
活动
和我的
片段
之间发送和接收数据


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

使用接口。下面是Android doc的一个摘录,其中包含了有关如何在
片段
活动
之间进行通信以及如何在
活动
之间进行通信的详细示例:

为了允许片段与其活动通信,您可以在片段类中定义一个接口,并在活动中实现它。片段在其onAttach()生命周期方法期间捕获接口实现,然后可以调用接口方法以便与活动通信


这使您的
片段
模块化,并允许您在多个活动中重用相同的
片段
。您只需在新的
活动
中实现
接口

使用接口。下面是Android doc的一个摘录,其中包含了有关如何在
片段
活动
之间进行通信以及如何在
活动
之间进行通信的详细示例:

为了允许片段与其活动通信,您可以在片段类中定义一个接口,并在活动中实现它。片段在其onAttach()生命周期方法期间捕获接口实现,然后可以调用接口方法以便与活动通信

这使您的
片段
模块化,并允许您在多个活动中重用相同的
片段
。您只需在新的
活动
中实现
接口

你可以用两种方法来做。 第一种方法是定义一个接口。 第二种方法是eventbus

我喜欢乘公共汽车。即使可能,也要学习rxjava,并在那里使用事件逻辑

你可以用两种方法来做。 第一种方法是定义一个接口。 第二种方法是eventbus


我喜欢乘公共汽车。即使可能,也要学习rxjava,并在那里使用事件逻辑

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

公共类HeadlinesFragment扩展ListFragment{ OnHeadlineSelectedListener McCallback

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

}

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

公共类HeadlinesFragment扩展ListFragment{ OnHeadlineSelectedListener McCallback

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

可能重复:可能重复: