我正在尝试在Fragments
容器中显示两个FrameLayout
。我一次只显示一个,并根据我的应用程序逻辑隐藏另一个。我相信每次改变设备方向时,都会重新创建!我可以看到重复的碎片相互重叠!怎么解决?提前谢谢。
public class MainActivity extends AppCompatActivity {
final Fragment oneFragment = oneFragment.newInstance();
final Fragment twoFragment = twoFragment.newInstance();
Fragment active = oneFragment;
final FragmentManager fm = getSupportFragmentManager();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// some other code
fm.beginTransaction().add(R.id.container, oneFragment, "1").commit();
fm.beginTransaction().add(R.id.container, twoFragment, "2").commit();
// onclick listener
if(condition) {
fm.beginTransaction().hide(active)
.show(oneFragment).commit();
} else {
fm.beginTransaction().hide(active)
.show(twoFragment).commit();
}
// some other code
答案 0 :(得分:1)
在活动重新启动后,片段始终会自动从之前的状态恢复。
要避免此行为,只需检查savedInstanceState
是否为空。
如果它为null - 我们有一个新的活动实例,如果没有 - 重新创建活动(因此,不需要再次添加碎片 - 它们已经存在)。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
fm.beginTransaction().add(R.id.container, oneFragment, "1").commit();
fm.beginTransaction().add(R.id.container, twoFragment, "2").commit();
}
}
看一下这篇文章(在运行时将一个片段添加到一个活动)以获取更多信息,它将帮助你实现片段魔术:) https://developer.android.com/training/basics/fragments/fragment-ui.html
答案 1 :(得分:0)
试试这个:
if (condition) {
replaceFragment(oneFragment, "1")
} else {
replaceFragment(twoFragment, "2")
}
private void replaceFragment(Fragment fragment, String tag) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.addToBackStack(tag);
transaction.replace(R.id.container, fragment, tag);
transaction.commit();
}