Android 使用清单中的ConfligChanges处理配置更改

Android 使用清单中的ConfligChanges处理配置更改,android,android-fragments,screen-orientation,Android,Android Fragments,Screen Orientation,我的应用程序包含两个片段:列表片段和细节片段。一切正常,但当我改变方向时。一切都搞砸了。我尝试过这样的方法来改变方向,它在横向到纵向的情况下有效,但在纵向到横向的情况下不起作用。有人能帮我吗。这是我的代码: @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Fragment lis

我的应用程序包含两个片段:列表片段和细节片段。一切正常,但当我改变方向时。一切都搞砸了。我尝试过这样的方法来改变方向,它在横向到纵向的情况下有效,但在纵向到横向的情况下不起作用。有人能帮我吗。这是我的代码:

@Override
    public void onConfigurationChanged(Configuration newConfig) {

        super.onConfigurationChanged(newConfig);
        Fragment listfragment = getSupportFragmentManager().findFragmentById(
                R.id.fragment_container);
        Fragment detailfragment = getSupportFragmentManager().findFragmentById(
                R.id.fragment_container2);
        FrameLayout fragmentLayout2;
        fragmentLayout2 = (FrameLayout) findViewById(R.id.fragment_container2);
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            if (listfragment != null) {
                replaceFragment(listfragment);

            }
            if (detailfragment != null) {
                replaceNewFragment(detailfragment);

            }
        }
        if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            fragmentLayout2.setVisibility(View.GONE);

        }
}

您需要覆盖扩展ActionBarActivity的mainActivity上的OnConfiguration Changed,以使其正常工作。像这样的方法应该会奏效:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
   getActionBar().setIcon(R.drawable.my_icon_land);//getSupportActionBar() for support library
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
    getActionBar().setIcon(R.drawable.my_icon_potrait);
}
}

只要您想更改操作栏中的图标,就可以调用
invalidateOptions功能表()
。这将重新绘制ActionBar项,并因此调用
onPrepareOptions菜单()
。在PrepareOptions功能表()的内部,您可以检查方向并设置菜单项的相应布局,或者只需更改图标即可


由于要在方向更改时重新创建菜单,因此可以在
onCreate()
中调用
invalidateOptionsMenu()
方法,因为方向更改时将调用该方法

动作栏中的菜单项图标是您想更改的吗?是的..我想更改动作栏菜单项,当方向发生变化,但活动无法在右侧重新创建..我希望重新创建活动..我应该在创建活动时在内部调用它?它说它需要API级别11..我支持API级别9API<11使用SupportInvalidateOptions功能表()。还有,什么不起作用?SupportInvalidateOptions菜单()或代码?我使用了onCreateOptions菜单。我在基本活动中使用操作栏…而不是在片段中。我只是在替换片段时显示/隐藏图标