片段

时间:2017-04-27 15:36:40

标签: android android-fragments

我有一个MainActivity,我在其中加载不同的片段(只有一个片段)。

我也实现了HomeAsUp,它运行良好,但是当我打开一个片段时,后面的箭头出现在左上角,但如果我改变了屏幕方向,则会出现汉堡包菜单。我认为当屏幕方向改变时活动被破坏时,片段后台也会被破坏,我该如何避免这种情况?

主要活动

public class MainActivity extends AppCompatActivity
           implements NavigationView.OnNavigationItemSelectedListener {

    private HashMap<String, String> connectedUserDataMap;
    private FloatingActionButton fab;
    private TextView textAccountName;
    private ImageView profileImage;
    private Bitmap profileImageBitmap;
    private boolean doubleBackToExitPressedOnce = false;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (savedInstanceState == null) {  //Main menu
            MainFragment fragment = new MainFragment();
            android.support.v4.app.FragmentTransaction fragmentTransaction =
                    getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.fragment_container, fragment);  
            fragmentTransaction.commit();

        }
   //listener onBackStackChangedListener
           getSupportFragmentManager().addOnBackStackChangedListener(new 
   FragmentManager.OnBackStackChangedListener() {
               @Override
               public void onBackStackChanged() {

                if (getSupportFragmentManager().getBackStackEntryCount() > 0) {

                    getSupportActionBar().setDisplayHomeAsUpEnabled(true); // show back button
                    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            onBackPressed();
                        }
                    });
                } else {
                    //show hamburger
                    getSupportActionBar().setDisplayHomeAsUpEnabled(false);
                    toggle.syncState();
                    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            drawer.openDrawer(GravityCompat.START);
                        }
                    });
                }
            }
        });
}

在片段中,我没有任何与此问题相关的内容,只是一个片段

编辑1:

我正在片段

中做一些System.out.printlns
System.out.println("BACKSTACK COUNT =  
 "+getActivity().getSupportFragmentManager().getBackStackEntryCount());

我可以看到getBackStackEntryCount()= 1,但是我的MainActivity中的代码没有执行,因为backstack没有改变,也没有打印后退箭头

问题是,当我打开片段时,后箭头位于左上角,但是当我旋转屏幕时,汉堡包菜单出现时不应该

已解决:我只是将与OnBackStackChangedListener关联的代码也放在MainActivity oncreate方法中了!

感谢所有人!

2 个答案:

答案 0 :(得分:0)

您是否尝试过添加

android:configChanges="orientation"

在你的活动的活动标签中你的maifest不会在改变方向时被销毁?

编辑1

检查此问题,它似乎与您的问题类似: Fragment Backstack is not restored when orientation changes

答案 1 :(得分:0)

尝试在片段的onCreate()中添加以下行:

this.setRetainInstance(true);

即使轮换也会保持状态。它将保证片段不会被破坏并在方向更改时重新创建