我有一个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.printlnsSystem.out.println("BACKSTACK COUNT =
"+getActivity().getSupportFragmentManager().getBackStackEntryCount());
我可以看到getBackStackEntryCount()= 1,但是我的MainActivity中的代码没有执行,因为backstack没有改变,也没有打印后退箭头
问题是,当我打开片段时,后箭头位于左上角,但是当我旋转屏幕时,汉堡包菜单出现时不应该
已解决:我只是将与OnBackStackChangedListener关联的代码也放在MainActivity oncreate方法中了!
感谢所有人!
答案 0 :(得分:0)
您是否尝试过添加
android:configChanges="orientation"
在你的活动的活动标签中你的maifest不会在改变方向时被销毁?
编辑1
检查此问题,它似乎与您的问题类似: Fragment Backstack is not restored when orientation changes
答案 1 :(得分:0)
尝试在片段的onCreate()中添加以下行:
this.setRetainInstance(true);
即使轮换也会保持状态。它将保证片段不会被破坏并在方向更改时重新创建