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

时间:2014-06-20 12:14:02

标签: android android-fragments screen-orientation

我的应用包含两个片段:列表片段和详细信息片段。一切正常。但是当我改变方向时。一切都搞砸了。我尝试过这样的方法来改变方向,它适用于横向到纵向的情况,但不适用于纵向到横向。谁能帮我。这是我尝试过的代码:

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

        }
}

2 个答案:

答案 0 :(得分:0)

您需要覆盖mainActivity上的onConfigurationChanged,它扩展ActionBarActivity才能使其正常工作。这样的事情应该有效:

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

答案 1 :(得分:0)

每当您想要更改ActionBar中的图标时,请致电invalidateOptionsMenu()。这将重新绘制ActionBar项目,从而调用onPrepareOptionsMenu()。在onPrepareOptionsMenu()内,您可以检查方向并设置菜单项的相应布局或只更改图标。

由于您希望在方向更改时重新创建菜单,因此可以在invalidateOptionsMenu()内调用onCreate()方法,因为方向更改时会调用它。