【问题标题】:Specific orientation for different fragments不同片段的特定方向
【发布时间】:2014-03-02 03:43:35
【问题描述】:

我想在我的应用程序中独立更改每个片段的屏幕方向(即片段 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 内的片段参数中的方向,在onResumeonCreate 片段方法中使用setRequestedOrientation 每种方法都会导致无限循环并改变方向(整个活动被破坏并且一次又一次地重新创建)。

有人知道正确的方法吗?

【问题讨论】:

    标签: android android-fragments screen-orientation


    【解决方案1】:

    看起来这样做的唯一方法是将当前方向存储在其他地方(例如作为静态变量)以检查在重新创建活动之前设置了哪个方向,并在每个片段中检查它是否是堆栈中的最后一个getFragmentManager().getFragments()

    以下代码对我来说很好用(我的 getArguments Bundle 内容是几个字符串):

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多