我希望我的应用在设备处于纵向模式时显示一个片段,在设备处于横向模式时显示两个片段。
一个片段包含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!");
}
}
当我在肖像上运行应用程序时,我得到“没有细节碎片!”如预期的那样。
当我在横向上运行时,我会按预期得到“有一个细节碎片”。
当我在横向上运行它,然后切换到肖像时,它会记录“有一个细节碎片”,即使我已将其删除。
我做错了什么?如何列出我的应用程序的所有片段,以便查看问题所在?