我在容器Activity上使用此方法来显示BFrag
public void showBFrag()
{
// Start a new FragmentTransaction
FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();
if(mBFrag.isAdded())
{
Log.d(LOG_TAG, "Show() BFrag");
fragmentTransaction.show(mBFrag);
}
else
{
Log.d(LOG_TAG, "Replacing AFrag -> BFrag");
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);
}
// Keep the transaction in the back stack so it will be reversed when backbutton is pressed
fragmentTransaction.addToBackStack(null);
// Commit transaction
fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
我从容器Activity中调用它; 首次:
然后我按下后退按钮:
然后我通过从同一个Activity调用showBFrag()再次前进:
所以:
编辑:这是异常的完整信息.
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): java.lang.IllegalStateException: Fragment …Run Code Online (Sandbox Code Playgroud) android fragment illegalstateexception android-fragments android-3.0-honeycomb
我有一个AudioPlayerFragment用setArguments()传递一些url的东西.
如果我的实例中有一个url密钥,我会启动一个播放音频流的服务.如果已经播放了一个流,我会停止它并使用新流再次启动它.getArguments()AudioPlayerFragment
如果没有争论,我什么都不做.
我的问题是参数与实例保持一致,所以当我回到它时getArguments(),如果没有设置新的,则返回最新的参数集.
所以在阅读它们之后,我尝试将参数设置为null
setArguments(null);
Run Code Online (Sandbox Code Playgroud)
但我明白了
Java.lang.IllegalStateException: fragment already active
Run Code Online (Sandbox Code Playgroud)
那我怎么能清除这些论点呢?
我有两个活跃的片段并在平板电脑上并排显示.当用户从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();
}
Run Code Online (Sandbox Code Playgroud)
然后在fragmentB中接收如下:
public void onTrackSelected() {
String trackId = getArguments().getString("trackId");
Toast.makeText(getActivity().getApplicationContext(), trackId,Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
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): …Run Code Online (Sandbox Code Playgroud)