如何在 Android 上设置返回键操作
How to set back key action on Android
我正在开发一个 Android 应用程序,该应用程序从用作菜单屏幕的 activity 开始(我将此 activity 称为菜单 activity ).
有一个按钮可以将应用程序移动到另一个 activity,用户可以在其中输入他们的姓名(我将此 activity 称为姓名 activity),然后应用 return 到菜单 activity。
输入我的名字后,(我现在是这样的:菜单 - 名字 - 菜单)当我按下后退按钮时,它回到名字 activity,名字仍然存在于编辑文本字段。
我想知道是否有一些方法可以更改后退键的功能以避免转到名称 activity,而是 return 到主 activity(层次结构是 - 主 - 菜单 - 名称)。
此外,有什么方法可以防止名称保留在 EditText 中吗?
提前致谢。
我对层次结构有点困惑,但无论哪种方式,如果您想清除任何以前的活动,这就是您要找的东西:
Clearing Activity Backstack
否则,请在 Activity 上调用 finish()
,然后再更改。这将清除 EditText
在你的 name activity 中,你有一个提交数据字段的按钮,对吗?
你可能有这样的东西:
Intent in = new Intent(this, menu_activity.class);
startActivity(in);
您应该删除该行并将其替换为 finish();
所以你假设你有以下内容:
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Save the data to whatever you would like (database, variable, etc.)
finish();
}
});
这是因为当你创建一个新的意图时,它被放置在 activity 堆栈中,(而当前的 activity 'remains' 在他当前的堆栈中状态,但只是不可见)。
例如(A
是你的菜单activity,B
是名称):
startIntentA(); ---> stack is: A (activity A is now visible)
startIntentB(); ---> stack is: AB (activity B is now visible)
startIntentA(); ---> stack is: ABA (activity A is now visible)
所以当你按下后退按钮时,当前的 activity 被销毁,它回到堆栈上最近打开的 activity:
stack is now ABA
backButton(); ---> A gets destroyed. Stack is: AB (activity B is now visible)
backButton(); ---> B gets destroyed. Stack is: A (activity A is now visible)
因此,当您不在 activity name
上的按钮上启动新意图时,就没有 activity 可以返回到:
startIntentA(); ---> stack is: A (activity A is now visible)
startIntentB(); ---> stack is: AB (activity B is now visible)
finish(); ---> stack is: A (the original activity is now visible)
如果你想保存用户输入,即使他们按下后退按钮,你可以覆盖 onBackPressed()
方法:
@Override
public void onBackPressed() {
// Save the data to whatever you would like (database, variable, etc.)
finish();
}
注意:您可以通过设置setCancelable(false);
.
禁止使用后退按钮取消当前activity
我正在开发一个 Android 应用程序,该应用程序从用作菜单屏幕的 activity 开始(我将此 activity 称为菜单 activity ).
有一个按钮可以将应用程序移动到另一个 activity,用户可以在其中输入他们的姓名(我将此 activity 称为姓名 activity),然后应用 return 到菜单 activity。
输入我的名字后,(我现在是这样的:菜单 - 名字 - 菜单)当我按下后退按钮时,它回到名字 activity,名字仍然存在于编辑文本字段。
我想知道是否有一些方法可以更改后退键的功能以避免转到名称 activity,而是 return 到主 activity(层次结构是 - 主 - 菜单 - 名称)。
此外,有什么方法可以防止名称保留在 EditText 中吗?
提前致谢。
我对层次结构有点困惑,但无论哪种方式,如果您想清除任何以前的活动,这就是您要找的东西: Clearing Activity Backstack
否则,请在 Activity 上调用 finish()
,然后再更改。这将清除 EditText
在你的 name activity 中,你有一个提交数据字段的按钮,对吗?
你可能有这样的东西:
Intent in = new Intent(this, menu_activity.class);
startActivity(in);
您应该删除该行并将其替换为 finish();
所以你假设你有以下内容:
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Save the data to whatever you would like (database, variable, etc.)
finish();
}
});
这是因为当你创建一个新的意图时,它被放置在 activity 堆栈中,(而当前的 activity 'remains' 在他当前的堆栈中状态,但只是不可见)。
例如(A
是你的菜单activity,B
是名称):
startIntentA(); ---> stack is: A (activity A is now visible)
startIntentB(); ---> stack is: AB (activity B is now visible)
startIntentA(); ---> stack is: ABA (activity A is now visible)
所以当你按下后退按钮时,当前的 activity 被销毁,它回到堆栈上最近打开的 activity:
stack is now ABA
backButton(); ---> A gets destroyed. Stack is: AB (activity B is now visible)
backButton(); ---> B gets destroyed. Stack is: A (activity A is now visible)
因此,当您不在 activity name
上的按钮上启动新意图时,就没有 activity 可以返回到:
startIntentA(); ---> stack is: A (activity A is now visible)
startIntentB(); ---> stack is: AB (activity B is now visible)
finish(); ---> stack is: A (the original activity is now visible)
如果你想保存用户输入,即使他们按下后退按钮,你可以覆盖 onBackPressed()
方法:
@Override
public void onBackPressed() {
// Save the data to whatever you would like (database, variable, etc.)
finish();
}
注意:您可以通过设置setCancelable(false);
.