为什么FragmentTransaction偶尔会工作?

时间:2013-07-19 21:49:50

标签: android android-fragments visibility fragmenttransaction

我的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的布局会一直显示,而另一个则不会显示(当前有白色背景的页面)。 根据我从我的代码和我的意图的理解,隐藏filessend和show senddev。 有谁知道为什么隐藏/显示可能无法正常工作。

BTW我正在使用兼容性库。 (还尝试了常规的api Honeycomb +库,但仍然没有。)

2 个答案:

答案 0 :(得分:1)

我已经弄明白为什么会这样。出于某种原因,如果你使用没有窗口背景的样式,即使你隐藏/显示不同的片段,它们都将被绘制(出于某种原因我不知道为什么)。所以我添加了一个

的风格
<item name="windowBackground">@null</item>

为了减少绘制的像素数量,是阻止我的事情。谁知道。

答案 1 :(得分:0)

在调用hide()和show()函数之前,您必须将这些片段添加到它们要显示的视图中。只需事先初始化它们。