当用户执行不同的操作时,我试图动态地向DialogFragments添加/删除FragmentManager。问题是FragmentManager不能正确删除所有这些文件。我正在调用remove()函数,因此我很好奇为什么未删除这些Fragments。我在网上搜索过,人们说您应该使用remove方法从Fragments中删除​​FragmentManager

下面的示例代码显示了我在做什么:

            // originally added `LoginRestFragment` with TAG_LOGIN_REST_FRAGMENT tag to Fragment Manager
            rest = new SettingsDialogFragment();
            FragmentManager fm = getFragmentManager();
            rest.setArguments(bundle);
            Fragment fragment = fm.findFragmentByTag(TAG_LOGIN_REST_FRAGMENT);
            Log.d("frag_type", fragment.toString());
            fm.beginTransaction().remove(fragment).commit();
            fragment = fm.findFragmentByTag(TAG_LOGIN_REST_FRAGMENT);
            Log.d("is_frag_removed", fragment.toString());
            // why does this return a Fragment type ^^ shouldn't it throw null errror?
            Log.d("rest", rest.toString());
            // ^ this shows rest has been updated from LoginRestFrament to SettingsDialogFragment
            fm.beginTransaction().add(rest, TAG_LOGIN_REST_FRAGMENT).commit();
            fragment = fm.findFragmentByTag(TAG_LOGIN_REST_FRAGMENT);
            Log.d("frag_type", fragment.toString());
            // why is this not SettingsDialogFragment??


显示所代表内容的日志语句。我应该注意,屏幕上显示的不再是LoginRestFragment,而是SettingsDialogFragment(如预期的那样),其余是类变量。

D/frag_type: LoginRestFragment
D/is_frag_removed: LoginRestFragment
D/rest: SettingsDialogFragment
D/frag_type: LoginRestFragment

最佳答案

谢谢DeeV!您说的是对的,这就是我找到了一种解决方法,以解决此问题,请参见this StackOverflow条目。实际上,您可以仅在executePendingTransactions()上使用FragmentManager进行动态提交。

09-10 06:54
查看更多