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