Android 将数据发送到容器活动

Android 将数据发送到容器活动,android,android-fragments,Android,Android Fragments,我有一个问题,就是在片段和它的容器活动之间来回发送一些数据,我成功地做到了。让我困惑的是将数据从片段发送到活动,首先我实现了OnResume(),OnStop(),并通过意图发送数据,这创建了一个无限循环,所以我删除了它们。然后我做了setRetainInstance(true),它工作了,给了我想要的行为 我的问题是我的数据实际上是如何发送的,以及在片段生命周期中的什么位置?正确的方法是使用接口。不要使用onStop或setRetainInstance() 看这个。它会解决你的问题。 您也可以

我有一个问题,就是在片段和它的容器活动之间来回发送一些数据,我成功地做到了。让我困惑的是将数据从片段发送到活动,首先我实现了
OnResume()
OnStop()
,并通过意图发送数据,这创建了一个无限循环,所以我删除了它们。然后我做了
setRetainInstance(true)
,它工作了,给了我想要的行为


我的问题是我的数据实际上是如何发送的,以及在片段生命周期中的什么位置?

正确的方法是使用接口。不要使用onStop或setRetainInstance()

看这个。它会解决你的问题。
您也可以通过使用
接口
、使用
事件总线
LocalBroadcastManager
,或者启动一个新的
活动
,并将
意图
和某种形式的
标志
传递到其
附加包或其他东西中来实现这一点

下面是一个关于使用接口的示例:

1.将函数
sendDataToActivity()
添加到接口中(
EventListener

2.在您的
main活动中实现此功能

// MainActivity.java

public class MainActivity extends AppCompatActivity implements EventListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void sendDataToActivity(String data) {
        Log.i("MainActivity", "sendDataToActivity: " + data);
    }
}
3.
MyFragment
中创建侦听器,并将其附加到
活动中

4。最后,使用
listener.sendDataToActivity(“Hello World!”)调用函数。


希望这会有所帮助~

我在这个链接上回答了这个问题。你可以看看这个。你也可以查看这个链接,我不是在寻找如何做,我不是在实现任何生命周期方法或意图,我只是指定了
setretinstate(true)
,为什么要发送数据,以及我想如何取消它背后的逻辑,以便在容器活动中添加一些上下文它的
新片段()
每次我输入我的片段时。+1我知道我可以使用接口来完成这项工作,但我的问题是理解我现在是如何做到的?
setretaintate(true)
是为我做的吗?尽管我每次都在创建一个新的myfragment实例,还是什么?
// MainActivity.java

public class MainActivity extends AppCompatActivity implements EventListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void sendDataToActivity(String data) {
        Log.i("MainActivity", "sendDataToActivity: " + data);
    }
}
// MyFragment.java 

public class MyFragment extends Fragment {

    private EventListener listener;

    @Override
    public void onAttach(Activity activity)
    {
        super.onAttach(activity);
        if(activity instanceof EventListener) {
            listener = (EventListener)activity;
        } else {
            // Throw an error!
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_my, container, false);

        // Send data
        listener.sendDataToActivity("Hello World!");

        return view;
    }

    @Override
    public void onDetach() {
        super.onDetach();

        listener = null;
    }
}