android - 使用后退按钮从 fragment 返回到主要 Activity

标签 android android-layout android-fragments

您好,我已经在应用程序抽屉中创建了 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/

相关文章:

来自 fragment 的android PopupWindow

android - 将 recyclerview 的最后两项居中?

android - NestedScrollView 中的 GridLayout,为什么我的列会超出 View 空间?

android - 非法状态异常 : Could not find method insert(View) in a parent or ancestor Context class android. support.v7.widget.AppCompatButton

android - 使所有 fragment 位于横幅广告上方

android - Android fragment 的 IllegalStateException

android - ListView 多选 - 默认透明颜色不能正常工作?

Android LocationListener 在手机处于 sleep 状态时保持开启状态

java - 在运行通用图像加载器时添加 imageUrl?

android - 为自定义 CompoundButton 添加波纹效果