处理片段在屏幕方向变化? [英] Handle Fragment On Screen Orientation Changes?

查看:133
本文介绍了处理片段在屏幕方向变化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我期运用这种code来处理三个片段,主要活动...

I am useing This Sort of Code To Handle Three Fragment in Main Activity ...

碎裂固定它的一帧。我改变FragmentB和FragmentC上按钮单击碎裂。
他的code运行良好无论是在纵向或横向视图。这里是The code波纹管。

FragmentA is Fixed it One Frame .. I change FragmentB and FragmentC on Button Click on FragmentA. his Code is Running well either in Portrait or Landscape view .Here is The Code bellow.

public class MainActivity extends FragmentActivity implements
        OnSwitchClickListener {

    FragmentManager manager;
    FragmentA fragA;
    FragmentB fragB;
    FragmentC fragC;

    boolean fragBSet = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fragA = new FragmentA();
        fragB = new FragmentB();
        fragC = new FragmentC();

        manager = getSupportFragmentManager();
        FragmentTransaction ft = manager.beginTransaction();

        ft.add(R.id.a_container, fragA, "frag A");

        if (fragBSet) {
            ft.add(R.id.bc_container, fragC, "frag C");
        } else {
            ft.add(R.id.bc_container, fragB, "frag B");
        }
        fragBSet = true;
        ft.commit();

    }

    @Override
    public void onSwitchClick(View v) {
        Toast.makeText(getApplicationContext(), "Switch clkick from Activity",
                Toast.LENGTH_LONG).show();
        FragmentTransaction ft = manager.beginTransaction();
        if (fragBSet) {
            ft.remove(fragB);
            ft.add(R.id.bc_container, fragC, "frag C");
            fragBSet = false;
        } else {
            ft.remove(fragC);
            ft.add(R.id.bc_container, fragB, "frag B");
            fragBSet = true;
        }

        ft.commit();

    }

这code要么是在纵向或横向视图运行良好...但是当过我改变方向的两个片段覆盖另一个。

This Code is Running well either in Portrait or Landscape view ... But When Ever I change the Orientation The Two Fragments Override One Another.

需要的解决方案。

推荐答案

当你改变方向时,你的活动被重建。

When your orientation change, your Activity is recreated.

"In the scenario where a user rotates their device, Android will destroy your 
application’s activity(s).  Before destroying them it calls, onSaveInstanceState,
allowing developers to persist data.  Once the activity is recreated post 
rotation, the OS will call onRestoreInstanceState giving developers a chance to 
restore the application state pre-rotation."  

您应该尽量保存您的片段州

You should try to save your Fragments State.

putFragment 将在一个Bundle片段的引用。这个捆绑可以持久保存的状态,并且恢复后getFragment(捆绑,字符串)将返回相同片段的当前实例。

@Override
protected void onSaveInstanceState(Bundle outState) {
   FragmentManager manager = getFragmentManager();
   manager.putFragment(outState, MyFragment.TAG, mMyFragment);
}  

getFragment 检索参考previously放置putFragment(束,弦乐,片段)当前片段实例

private void instantiateFragments(Bundle inState) {
   FragmentManager manager = getFragmentManager();
   FragmentTransaction transaction = manager.beginTransaction();

   if (inState != null) {
      mMyFragment = (MyFragment) manager.getFragment(inState, MyFragment.TAG);
   } else {
      mMyFragment = new MyFragment();
      transaction.add(R.id.fragment, mMyFragment, MyFragment.TAG);
      transaction.commit();
   }
}  

restoreFragment

@Override
protected void onRestoreInstanceState(Bundle inState) {
   instantiateFragments(inState);
}  

希望这有助于。

这篇关于处理片段在屏幕方向变化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆