将数据传递给添加的片段 – IlligalStateException:片段已处于活动状态

我有两个活跃的片段并在平板电脑上并排显示。 当用户从fragmentA中的listview中选择一个项时,我需要将一些数据从fragmentA传递给fragmentB。 尝试将活动中的数据传递到fragmentB时出现问题。 我收到错误:IlligalStateException:片段已经激活。

我从这样的活动传递数据:

@Override public void onTrackSelected(String trackId) { topBarFragment topBarFragment = (topBarFragment)getSupportFragmentManager().findFragmentById(R.id.topBar_fragment); Bundle bundle = new Bundle(); bundle.putString("trackId", trackId); //set Fragmentclass Arguments topBarFragment.setArguments(bundle); topBarFragment.onTrackSelected(); } 

然后在fragmentB中接收如下:

 public void onTrackSelected() { String trackId = getArguments().getString("trackId"); Toast.makeText(getActivity().getApplicationContext(), trackId,Toast.LENGTH_SHORT).show(); } } 

logcat的:

 02-25 02:58:22.190: E/AndroidRuntime(29593): FATAL EXCEPTION: main 02-25 02:58:22.190: E/AndroidRuntime(29593): java.lang.IllegalStateException: Fragment already active 02-25 02:58:22.190: E/AndroidRuntime(29593): at android.support.v4.app.Fragment.setArguments(Fragment.java:500) 02-25 02:58:22.190: E/AndroidRuntime(29593): at com.harteg.fragmentstest.ItemListActivity.onTrackSelected(ItemListActivity.java:88) 02-25 02:58:22.190: E/AndroidRuntime(29593): at com.harteg.fragmentstest.TracksFragment.onListItemClick(TracksFragment.java:136) 02-25 02:58:22.190: E/AndroidRuntime(29593): at android.support.v4.app.ListFragment$2.onItemClick(ListFragment.java:58) 02-25 02:58:22.190: E/AndroidRuntime(29593): at android.widget.AdapterView.performItemClick(AdapterView.java:298) 02-25 02:58:22.190: E/AndroidRuntime(29593): at android.widget.AbsListView.performItemClick(AbsListView.java:1100) 02-25 02:58:22.190: E/AndroidRuntime(29593): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749) 02-25 02:58:22.190: E/AndroidRuntime(29593): at android.widget.AbsListView$1.run(AbsListView.java:3423) 02-25 02:58:22.190: E/AndroidRuntime(29593): at android.os.Handler.handleCallback(Handler.java:725) 02-25 02:58:22.190: E/AndroidRuntime(29593): at android.os.Handler.dispatchMessage(Handler.java:92) 02-25 02:58:22.190: E/AndroidRuntime(29593): at android.os.Looper.loop(Looper.java:137) 02-25 02:58:22.190: E/AndroidRuntime(29593): at android.app.ActivityThread.main(ActivityThread.java:5039) 02-25 02:58:22.190: E/AndroidRuntime(29593): at java.lang.reflect.Method.invokeNative(Native Method) 02-25 02:58:22.190: E/AndroidRuntime(29593): at java.lang.reflect.Method.invoke(Method.java:511) 02-25 02:58:22.190: E/AndroidRuntime(29593): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 02-25 02:58:22.190: E/AndroidRuntime(29593): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 02-25 02:58:22.190: E/AndroidRuntime(29593): at dalvik.system.NativeStart.main(Native Method) 

在创建片段后,您无法更改传递给片段的参数。 你应该做的只是传递方法调用中的数据,如下所示:

 topBarFragment.onTrackSelected(trackId); 

并在你的片段上使用它:

 public void onTrackSelected(int trackId) { Toast.makeText(getActivity().getApplicationContext(), String.valueOf(trackId),Toast.LENGTH_SHORT).show(); } 

有关更多信息,请查看此处有关如何处理片段之间通信的文档。