我想在我的应用程序中独立更改每个片段的屏幕方向(即片段A仅为横向,片段B仅为纵向),就像我可以使用AndroidManifest.xml进行的活动一样。
当我创建我的片段时,我使用Fragment.setArgunents(..)
为每个片段传递一个屏幕方向常量。
我正在基础活动中切换片段:
public void setCurrentFragment(Fragment fragment, boolean addToBackstack) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction().replace(R.id.frameLayout, fragment);
if (addToBackstack)
fragmentTransaction.addToBackStack(Integer.toString(fragmentCount++));
fragmentTransaction.commit();
}
我尝试将方向更改为存储在setCurrentFragment
内的片段参数中的方向,使用onResume
onCreate
setRequestedOrientation
片段方法使用{{1}}每个方法导致无限循环改变方向(整个活动被破坏并一次又一次地重建)。
有谁知道这样做的正确方法?
答案 0 :(得分:0)
看起来这样做的唯一方法是将当前方向存储在其他位置(例如作为静态变量),以检查在重新创建活动之前设置的方向,并在每个片段中检查它是否是堆栈中的最后一个使用getFragmentManager().getFragments()
以下代码对我来说很好(我的getArguments捆绑内容是几个字符串):
private static int orientation;
@Override
public void onResume() {
super.onResume();
Fragment lastFragment = getFragmentManager().getFragments().get(getFragmentManager().getFragments().size() - 1);
if (lastFragment != null && lastFragment.getClass().equals(getClass())) {
if (lastFragment.getArguments() != null && getArguments() != null) {
if (lastFragment.getArguments().toString().equals(getArguments().toString())) {
setCurrentOrientation(fragmentOrientation, getActivity());
}
}
} else {
setCurrentOrientation(contentPage, getActivity());
}
}
private void setCurrentOrientation(int orientation) {
if (orientation == currentOrientation) {
return;
} else {
currentOrientation = orientation;
}
getActivity().setRequestedOrientation(currentOrientation);
}