无法删除屏幕方向更改时的片段

时间:2014-08-04 19:30:05

标签: android android-fragments

我希望我的应用在设备处于纵向模式时显示一个片段,在设备处于横向模式时显示两个片段。

一个片段包含ListView并始终显示,第二个片段包含有关所选列表项的更多详细信息,仅在横向模式下显示。

第一个片段使用通信器模式与应用程序通信。

我设置了两个布局文件,每个方向一个,一切正常。

问题是,当我在横向模式下运行应用程序并将其旋转回肖像时,第二个片段虽然不可见但仍然存在,这意味着:

getFragmentManager().findFragmentById(R.id.detailsFragment) == null // false

我认为这与android有关,而不是自动关闭不必要的片段,所以在我的活动的onCreate方法中我尝试添加:

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
    if (getFragmentManager().findFragmentById(R.id.detailsFragment) != null) {
        Log.v(DEBUG_TAG, "There is a details Fragment in portrait mode - removing");
        getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.detailsFragment)).commit();
    }
}

虽然显示了日志消息,意味着没有主要的搞砸/拼写错误等,但是片段不会被删除。

我刚刚更改了我的列表项单击处理程序,以记录当前配置中是否有detailsFragment:

@Override
public void listItemClicked(int index) {
    if(getFragmentManager().findFragmentById(R.id.detailsFragment) != null){
        Log.v(DEBUG_TAG,"There is a details Fragment");
    } else {
        Log.v(DEBUG_TAG,"No details Fragment!");
    }
}

当我在肖像上运行应用程序时,我得到“没有细节碎片!”如预期的那样。

当我在横向上运行时,我会按预期得到“有一个细节碎片”。

当我在横向上运行它,然后切换到肖像时,它会记录“有一个细节碎片”,即使我已将其删除。

我做错了什么?如何列出我的应用程序的所有片段,以便查看问题所在?

0 个答案:

没有答案