如果有帮助,我想要的内容与此google tutorial
中的内容相似但是在转换之前会创建一个片段。如果我这样做,过渡工作正常;但我不能用这种方法
=====
针对API 7+我只想在整个屏幕中看到一个片段并使用一个按钮(一个带有onTouch事件的绘制按钮)然后交替使用第二个片段,反之亦然。
但是当我用第二个片段替换第一个片段时,或者如果我使用fragmentTransaction.show和fragmentTransaction.hide,我得到一个空白屏幕;在我得到空白屏幕之前,我可以切换两次。我不想背靠背。
我在MainActivity的onCreate中创建片段:
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);
}
这不是我应该怎么做的?
更换碎片时出现空白
答案 0 :(得分:6)
尝试以这种方式初始化片段:
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;
}
答案 1 :(得分:1)
您正在组合两种不同的方法来更改显示的片段:
replace()
以使用其他片段替换容器的内容hide()
删除片段,然后调用show()
以显示其他片段。选择一种方法并坚持下去。构建灵活的用户界面指南仅使用replace()
方法,因此我首先尝试删除对show()
和hide()
的所有来电。
另请参阅Android Fragments: When to use hide/show or add/remove/replace?,了解使用隐藏/显示而非替换可能有益的时间。