Android 如何知道何时由于“后退”按钮而返回到活动?
我的主要活动导致第二个活动。如果用户按下手机的后退按钮,应用程序将返回主活动 发生这种情况时,我如何执行某些操作 (我知道我可以在SecondActivity中添加代码,将功能添加到back按钮,以便它将结果传递给MainActivity,但我不想在每个可能导致返回MainActivity的屏幕上都这样做。)Android 如何知道何时由于“后退”按钮而返回到活动?,android,android-studio,android-activity,Android,Android Studio,Android Activity,我的主要活动导致第二个活动。如果用户按下手机的后退按钮,应用程序将返回主活动 发生这种情况时,我如何执行某些操作 (我知道我可以在SecondActivity中添加代码,将功能添加到back按钮,以便它将结果传递给MainActivity,但我不想在每个可能导致返回MainActivity的屏幕上都这样做。) 也许是另一种提问方式,我如何知道MainActivity是因为按下了后退按钮而显示的,而不是因为有意图而被正式请求的?背景 我认为以下是实现这一要求的逻辑: 当用户在当前活动上按back键
也许是另一种提问方式,我如何知道MainActivity是因为按下了后退按钮而显示的,而不是因为有意图而被正式请求的?背景 我认为以下是实现这一要求的逻辑:
BaseActivity
的基本活动类。应用程序中的每个活动都应该从此类扩展
class BaseActivity extends AppCompatActivity {
public static String IS_BACK_KEY_PRESSED = "IS_BACK_KEY_PRESSED";
@Override
public void onBackPressed() {
// Remember the user's press of the back key action
getIntent().putExtra(IS_BACK_KEY_PRESSED, true);
// Call the super's method
super.onBackPressed();
}
/**
* Called when the activity has been resumed from an activity
* that has been destroyed because of user's press of the back key
*/
public void onGoBackFromAnotherActivity() {
}
}
步骤2。创建一个从应用程序类扩展而来的名为MyApp
的类。其目的是通过使用
请记住将此类添加到AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.kotlinapp">
<application
android:name=".MyApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity" />
</application>
</manifest>
SecondActivity.java
编辑:检查是否有任何活动(不知道是哪个活动)返回到所需的活动 要签入活动A,请使用:
@Override
protected void onResume() {
super.onResume();
// TODO: Work
}
如注释中所述,在以下情况下,将对活动/片段调用onResume:
----------过时的----------
在活动A和活动B之间 使用 在活动A和活动B中,使用
@Override
public void onBackPressed() {
setResult(CHOOSE_AN_INT_VALUE_TO_INDICATE_IT_CAME_FROM_BACK_PRESS);
finish();
}
然后在活动A中再次使用
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CHOOSE_AN_INT_VALUE_TO_INDICATE_IT_REQUESTS_FOR_BACK_PRESS && resultCode==CHOOSE_AN_INT_VALUE_TO_INDICATE_IT_CAME_FROM_BACK_PRESS) {
// TODO: Do your work
}
}
如果实现了这3个部分,则无需检查触发了反按的活动,只需比较请求代码和结果代码即可
我希望这有帮助 但是如果我不知道你从哪里来呢?或者如果我无法控制它,例如如果用户点击一个通知,导致另一个应用程序,然后他们按下返回按钮,返回到我的应用程序?^这可能意味着我的问题是错误的。也许我会问,“我怎么知道我的活动何时会出现在屏幕上?然后你需要实现onResume和onStart调用。onResume会在每次活动/片段恢复时通知你。但是,onResume不会提供使它恢复的上下文。当活动开始时,onResume也会被调用一次。
@Override
protected void onResume() {
super.onResume();
// TODO: Work
}
startActivityForResult(intent, CHOOSE_AN_INT_VALUE_TO_INDICATE_IT_REQUESTS_FOR_BACK_PRESS);
@Override
public void onBackPressed() {
setResult(CHOOSE_AN_INT_VALUE_TO_INDICATE_IT_CAME_FROM_BACK_PRESS);
finish();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CHOOSE_AN_INT_VALUE_TO_INDICATE_IT_REQUESTS_FOR_BACK_PRESS && resultCode==CHOOSE_AN_INT_VALUE_TO_INDICATE_IT_CAME_FROM_BACK_PRESS) {
// TODO: Do your work
}
}