我的xml中有几个片段(其中有4个)。我第一次使用以下代码运行活动:
private void loadSenderFragment(int sender_fragment) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// TODO: Animation for later
if (loadRunOnce) {
//ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out);
}
switch (sender_fragment) {
case FILES_TO_SEND_FRAGMENT:
Log.i(StaticValues.TAG, "files to send fragment visisble");
ft.hide(fragmentSendDev);
ft.show(fragmentFilesSend);
break;
case SEND_TO_FRAGMENT:
Log.i(StaticValues.TAG, "hiding filesSend, loading senddev");
ft.hide(fragmentFilesSend);
ft.show(fragmentSendDev);
break;
}
if (loadRunOnce)
ft.addToBackStack(null);
else {
ft.hide(fragmentReceiveWait);
ft.hide(fragmentReceiving);
loadRunOnce = true;
}
ft.commit();
}
它显示了正确的视图(Files_to_send_fragment),然后通过回调从该片段中再次调用loadSenderFragment,除了这次是SEND_TO_FRAGMENT的情况。
我知道这被称为是因为我的日志:隐藏fileSend,加载senddev会显示在我的logcat上,并且ft.addToBackStack也能正常工作,因为按下后退按钮不会取消该活动。但是fragmentFilesSend的布局继续显示,而其他布局则不显示(当前页面为白色背景)。
根据我对代码的了解和意图,我隐藏了文件发送并显示senddev。
有谁知道为什么隐藏/显示可能无法正常工作。
顺便说一句,我正在使用兼容性库。 (还尝试了常规api Honeycomb +库,但仍然没有执行任何操作)。
最佳答案
我已经弄清楚了为什么会这样。由于某种原因,如果您使用没有窗口背景的样式,即使您隐藏/显示不同的片段,也会绘制所有片段(出于某种原因,我不知道为什么)。所以我加了一个
<item name="windowBackground">@null</item>
为了减少绘制的像素数,是阻碍我的事情。谁知道。