Android 我想关闭应用程序,但不返回到上一个活动

Android 我想关闭应用程序,但不返回到上一个活动,android,onbackpressed,activity-finish,Android,Onbackpressed,Activity Finish,我在我的应用程序中使用了一个活动和几个片段 有时,当我在第一页(活动)上按下后,不会退出应用程序并返回到片段或同一页 当这种情况发生时,我在程序中做了很多工作 我使用此代码来解决此问题,但是 它也适用于碎片 @Override public void onBackPressed() { this.finish(); } 为什么返回到片段或同一页 这个问题是如何解决的 我现在用这个 boolean doubleBackToExitPressedOnce = fals

我在我的应用程序中使用了一个活动和几个片段 有时,当我在第一页(活动)上按下后,不会退出应用程序并返回到片段或同一页

当这种情况发生时,我在程序中做了很多工作

我使用此代码来解决此问题,但是 它也适用于碎片

@Override
    public void onBackPressed() {
       this.finish();
    }
为什么返回到片段或同一页

这个问题是如何解决的

我现在用这个

boolean doubleBackToExitPressedOnce = false;

    @Override
    public void onBackPressed() {
        if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
            getSupportFragmentManager().popBackStack();
        } else if (!doubleBackToExitPressedOnce) {
            this.doubleBackToExitPressedOnce = true;
            Toast.makeText(this, "Click to exit again", Toast.LENGTH_SHORT).show();
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    doubleBackToExitPressedOnce = false;
                }
            }, 2000);
        } else {
            super.onBackPressed();
            return;
        }
    }
这条路将成为一个碎片

TabirFragment tabirFragment = new TabirFragment();
            Bundle bundle = new Bundle();
            bundle.putInt("id", id);
            bundle.putString("name", name);
            tabirFragment.setArguments(bundle);
            FragmentManager manager = getSupportFragmentManager();
            FragmentTransaction transaction = manager.beginTransaction().addToBackStack(null);
            transaction.replace(R.id.main_activity, tabirFragment).commit();

几件什么?碎片,很难理解,不管怎样,如果你想管理碎片和onBackPress,使用这个

 private void setUpBackStackListener() {
    getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            Fragment currentFragment = getFragmentManager().findFragmentById(R.id.am_frameLayout);
            if (currentFragment != null) {

                int myCount = getFragmentManager().getBackStackEntryCount();
                if (LOG_DEBUG) Log.e(TAG, "backStackCount : " + myCount);

                String currentFragName = currentFragment.getClass().getSimpleName();

                if (currentFragName.equalsIgnoreCase(FragOne.class.getSimpleName())) {
                    shouldExit = true;

                } else if (currentFragName.equalsIgnoreCase(FragTwo.class.getSimpleName())) {
                    shouldExit = false;

                    }
                }
            }
        }
    });
}
 @Override
public void onBackPressed() {
    if (shouldExit == true) {
        if (LOG_DEBUG)
            Log.e(TAG, " Yeah exit douche:" + shouldExit + " isLastEntry : Testing :" + isLastEntry);
 super.onBackPressed();
    } else {
        getFragmentManager().popBackStack();
    }
}

,如果这不是您想要的,您可能希望以一种稍微微妙的方式清除您想要的内容

如果堆栈上有多个活动,那么:

finish()-完成从中调用的活动,您可以看到 前面的活动

boolean doubleBackToExitPressedOnce=false;

@Override
public void onBackPressed() {
    //Checking for fragment count on backstack
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack();
    } else if (!doubleBackToExitPressedOnce) {
        this.doubleBackToExitPressedOnce = true;
        Toast.makeText(this,"Please click back again to exit.", Toast.LENGTH_SHORT).show();

        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                doubleBackToExitPressedOnce = false;
            }
        }, 2000);
    } else {
        super.onBackPressed();
        return;
    }
}
    <activity
        android:name=".example"
        android:noHistory="true">
    </activity>
还有
系统。退出
,但这在您的情况下不起作用:

System.exit(0)-重新启动应用程序,同时减少应用程序上的一个活动 堆栈因此,如果从ActivityA调用ActivityB,并且System.exit(0) 在ActivityB中调用,则应用程序将被终止并 仅以一项活动立即开始活动a


我建议你使用。它将完成当前活动以及其下的所有活动。我提醒您,当您使用多个片段和活动时,它仅受API级别16+的支持。当您使用方法startActivity()切换活动时,始终使用方法finish();当您反向按下时,您将永远不会得到多个活动和片段,并在主活动上使用onBackPressed方法

boolean doubleBackToExitPressedOnce=false;

@Override
public void onBackPressed() {
    //Checking for fragment count on backstack
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack();
    } else if (!doubleBackToExitPressedOnce) {
        this.doubleBackToExitPressedOnce = true;
        Toast.makeText(this,"Please click back again to exit.", Toast.LENGTH_SHORT).show();

        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                doubleBackToExitPressedOnce = false;
            }
        }, 2000);
    } else {
        super.onBackPressed();
        return;
    }
}
    <activity
        android:name=".example"
        android:noHistory="true">
    </activity>

我能给您的最简单的解决方案是在清单文件中不保留活动的历史记录。然后重写每个活动的back方法

boolean doubleBackToExitPressedOnce=false;

@Override
public void onBackPressed() {
    //Checking for fragment count on backstack
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack();
    } else if (!doubleBackToExitPressedOnce) {
        this.doubleBackToExitPressedOnce = true;
        Toast.makeText(this,"Please click back again to exit.", Toast.LENGTH_SHORT).show();

        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                doubleBackToExitPressedOnce = false;
            }
        }, 2000);
    } else {
        super.onBackPressed();
        return;
    }
}
    <activity
        android:name=".example"
        android:noHistory="true">
    </activity>

我认为你在处理活动,因为你说了
我想关闭应用程序,但不要返回到上一个活动
是的,在使用startActivity()后必须使用finish()方法。@lonut correct