【发布时间】:2014-05-08 02:48:36
【问题描述】:
我有一个包含一些按钮和一些片段的活动。
如果我单击按钮 A,我将显示片段“FragA”。当我在“FragA”中时,我可以执行一些操作,例如从图库中选择图片,选择图片后我需要留在“FragA”中。
但是当我选择图片时,我返回到Activity并且“FragA”被隐藏了。
如何执行一个动作并且仍然在同一个 Fragment 中或在 Activity 中显示正确的 Fragment?
【问题讨论】:
我有一个包含一些按钮和一些片段的活动。
如果我单击按钮 A,我将显示片段“FragA”。当我在“FragA”中时,我可以执行一些操作,例如从图库中选择图片,选择图片后我需要留在“FragA”中。
但是当我选择图片时,我返回到Activity并且“FragA”被隐藏了。
如何执行一个动作并且仍然在同一个 Fragment 中或在 Activity 中显示正确的 Fragment?
【问题讨论】:
您可以重新创建片段并使用修改此代码在您的活动中替换它:
if (currentState == STATE_MAIN_FRAGMENT) {
return;
}
mainScreenFragment = (MainScreenFragment) getSupportFragmentManager().findFragmentByTag(MainScreenFragment.TAG);
if (mainScreenFragment == null) {
mainScreenFragment = new MainScreenFragment();
}
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.flFragmentContainer, mainScreenFragment, MainScreenFragment.TAG);
fragmentTransaction.commit();
第一个“if”检查是否设置了片段。这不是必需的,但这是一个很好的做法。它可以防止您在不需要时替换片段。
还有一件事对我来说很奇怪。因为您说 > - 这意味着它已经设置但容器不可见?然后 yourFragmentContainer.setVisiblity(View.VISIBLE);在活动结果中。
最后可以帮助您的是保留片段,这样它就不会被销毁并再次重新创建。一些有用的链接:
Understanding Fragment's setRetainInstance(boolean)
http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
或者您可以复制粘贴 Button 的 OnClickListener 中的内容,这样它也会在 onActivityResult 发生。
【讨论】: