您好,我已经在应用程序抽屉中创建了 fragment ,现在当我按 fragment 上的后退按钮时,它正在关闭应用程序。
Main Activity 的 webView 中已经存在一个 onKeyDown。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (myWebView.canGoBack()) {
myWebView.goBack();
} else {
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
对于 onBackPressed 方法
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
fragment 实现方法,
if (fragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_main, fragment);
ft.addToBackStack("close");
ft.commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
最佳答案
当您将 fragment 添加到某个容器或使用 xml 对其进行膨胀时,它不会添加到后台堆栈中,因此,当“onBackPressed”发生时,它会抛出后台堆栈中的最后一个 Activity - 这是托管该 fragment 的 Activity ,因此退出应用程序。 我认为这篇文章: Android: Fragments backStack
可以帮助你,它解释了如何将 fragment 事务添加到backstack:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(..............);
fragmentTransaction.addToBackStack("fragment transaction name, not required");
fragmentTransaction.commit();
关于android - 使用后退按钮从 fragment 返回到主要 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42416467/