当我启动我的应用程序时,它会运行一个AsyncTask
加载然后进入onPostExecute
,然后我setContentView
到新布局然后添加一个带有两个按钮的片段,通过添加提供两种模式FragmentTransaction
。FragmentTransaction
单击两种模式中的一种后,它会使用 replace 方法将片段替换为另一个片段。
如果应用程序崩溃,它会返回到第一个屏幕,加载提供两种模式的两个按钮。在这种情况下,如果选择了任一模式,则加载第二个片段,但现在背景突然透明,显示下面的两个按钮,它们仍然可点击。如果再次单击它们,它们会正确替换片段,使其在下方不可见。这很奇怪,我不明白是什么原因造成的。
我已经研究并看到了这两个类似的问题,one和two,这表明这可能是因为 ID 错误或者我在 XML 中定义了片段。这两个因素都不是。
我的代码如下所示:
下面我替换加载屏幕。
@Override
protected void onPostExecute(Void result) {
setContentView(R.layout.activity_main_screen);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.add(R.id.fragment_container, new ModeFragment())
.commit();
}
之后,当单击按钮时,我将希望替换当前的片段传递到下面的此方法中:
private void replaceCurrentFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.replace(R.id.fragment_container, fragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(null).commit();
}
这第一次有效,但是如果发生崩溃,则应用程序将返回到第一个片段,并且第二次传递此方法时,新的替换片段是半不可见的。再次单击第一个片段上的按钮再次调用此方法,现在可以了。
显然我不希望应用程序崩溃,所以这不应该发生,但我觉得我编写代码的方式有问题。