Android中片段的交易导致空白屏幕

如果有帮助,我想要的是类似于这个谷歌教程做的

但是在转换之前会创build一个片段。 如果我这样做,过渡正常; 但我不能使用这种方法

=====

瞄准API 7+我只是想在整个屏幕上看到一个片段,并使用一个button(一个绘制的button,一个onTouch事件),然后交替到第二个片段,反之亦然。

但是,当我用第二个replace第一个片段时,或者如果我使用fragmentTransaction.show和fragmentTransaction.hide; 我可以切换两次,然后我得到空白屏幕。 我不想在后台。

我在MainActivity的onCreate中创build片段:

DiceTable diceTable = new DiceTable(); Logger logger = new Logger(); fragmentTransaction.add(diceTable, DICETABLE_TAG); fragmentTransaction.add(logger, LOGGER_TAG); fragmentTransaction.add(R.id.fragment_container, logger); fragmentTransaction.add(R.id.fragment_container, diceTable); 

然后在一个方法(从碎片调用)我做开关:

  Logger logger = (Logger)fragmentManager.findFragmentByTag(LOGGER_TAG); DiceTable diceTable = (DiceTable)fragmentManager.findFragmentByTag(DICETABLE_TAG); if (diceTable.isVisible()) { fragmentTransaction.replace(R.id.fragment_container, logger); fragmentTransaction.commit(); fragmentTransaction.hide(diceTable); fragmentTransaction.show(logger); } else if (logger.isVisible()) { fragmentTransaction.replace(R.id.fragment_container, diceTable); fragmentTransaction.commit(); fragmentTransaction.hide(logger); fragmentTransaction.show(diceTable); } 

这不是我应该怎么做?

更换碎片时的空白屏幕

尝试以这种方式初始化片段:

 private void initFragments() { mDiceTable = new DiceTable(); mLogger = new Logger(); isDiceTableVisible = true; FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.fragment_container, mDiceTable); ft.add(R.id.fragment_container, mLogger); ft.hide(mLogger); ft.commit(); } 

然后以这种方式在他们之间翻转:

  private void flipFragments() { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); if (isDiceTableVisible) { ft.hide(mDiceTable); ft.show(mLogger); } else { ft.hide(mLogger); ft.show(mDiceTable); } ft.commit(); isDiceTableVisible = !isDiceTableVisible; } 

你正在结合两种不同的方法来改变显示的片段:

  • 调用replace()以用不同的Fragmentreplace容器的内容
  • 调用hide()去除一个Fragment,然后调用show()来显示另一个Fragment。

select一种方法,坚持下去。 构build一个灵活的用户界面指南只使用replace()方法,所以我会开始尝试删除所有调用show()hide()

另请参阅Android碎片:何时使用隐藏/显示或添加/删除/replace? 以便快速总结何时使用隐藏/显示而不是replace可能是有益的。