android 如何处理Activity中的后退按钮

e5nqia27  于 2023-04-18  发布在  Android
关注(0)|答案(9)|浏览(154)

如何处理Activity中的后退按钮?我有一些按钮。如果我单击其中一个按钮,它会重定向到我需要的按钮。它工作正常,但当我按下后退按钮时,它会完成。
如何解决这个问题?我只有一个活动,所有这些按钮。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {
        return false; //I have tried here true also
    }
    return super.onKeyDown(keyCode, event);
}

我已经使用上面的代码来处理返回按钮,但它不工作。当我按下返回按钮时,它自己就被击中了。

t3psigkw

t3psigkw1#

你可以这样处理:

API级别5及更高级别

@Override
public void onBackPressed() {
    // your code.
}

比API 5早

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
ijxebb2r

ijxebb2r2#

除了以上我个人推荐

onKeyUp():

编程说话*keydown会在用户最初按下某个键时触发**,但在用户保持按下该键时重复。

这对于所有开发平台都是如此。
Google开发建议,如果你在视图中拦截BACK按钮,你应该在keydown上使用starttracking跟踪KeyEvent,然后使用keyup调用。

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** Your Code ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
f3temu5u

f3temu5u3#

对于硬件设备返回按钮和软主页(返回)按钮,例如“〈-”,这对我来说是有效的。
(* 注意我在活动中有一个应用程序栏/工具栏)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            //finish();
            onBackPressed();
            break;
    }
    return true;
}


@Override
public void onBackPressed() {
   //Execute your code here
   finish();

}
yfwxisqw

yfwxisqw4#

更简单的方法是捕获Back按钮按下并调用moveTaskToBack(true),如下所示:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Android 2.0引入了一个新的onBackPressed方法,并对如何处理后退按钮these recommendations

xuo3flqw

xuo3flqw5#

您应该用途:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        // Take care of calling this method on earlier versions of
        // the platform where it doesn't exist.
        onBackPressed();
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    // This will be called either automatically for you on 2.0
    // or later, or by the code above on earlier versions of the
    // platform.
    return;
}

如下定义:http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html
如果您使用的是旧版本来编译代码,请将android.os.Build.VERSION_CODES.ECLAIR替换为5(例如,您可以添加一个名为ECLAIR的私有int)

ne5o7dgx

ne5o7dgx6#

这是做某事的简单方法。

@Override
        public void onBackPressed() {
            // do what you want to do when the "back" button is pressed.
            startActivity(new Intent(Activity.this, MainActivity.class));
            finish();
        }

我想可能有更复杂的方法来实现它,但我喜欢简单。例如,我使用上面的模板让用户退出应用程序,然后返回到我选择的另一个活动。

mdfafbf1

mdfafbf17#

这帮助了我。

@Override
public void onBackPressed() {
    startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();
}

或者你也可以用它来切换抽屉

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
        startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();

}
qvk1mo1f

qvk1mo1f8#

intent = Intent(this@activity2,activity1::class.java)
startActivity(intent)
jm81lzqq

jm81lzqq9#

如果你只是想停止后退按钮的工作而不发出警告,把它放在onCreate中(你可能需要一些额外的导入):

this.onBackPressedDispatcher.addCallback(this, false) { }

相关问题