在 android 中销毁/完成当前片段中的先前活动
Destroy/ finish previous activities from the current fragment in android
我开发这个应用程序已经有一段时间了,并且在应用程序中发现了这个错误。最初,当应用程序首次加载时,它从 home activity. 开始,然后用户交互会将应用程序导航到 activity1 使用 fragment1。 fragment1 有一个按钮。如果用户单击该按钮,activity1 调用 finish() 并通过调用 startActivity() 加载 activity2。此外,当用户单击从 fargment1、应用程序 returns 到主页 activity 的硬件后退按钮。
所以这里真正的问题是,当我在 activity2 并完成 () activity 时,应用程序将显示主页 activity。但是我想在从 activity2.
按下时完全关闭应用程序
以下是从片段 1 开始 activity2 的代码:
Intent intent = new Intent(context, Activity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
((Activity)context).finish();
我知道主页 activity 从未完成 ()-ed。
那么如何在导航到 activity2 时销毁 activity1 和主页 activity,并使 activity2 只剩下 activity 在申请中?
提前致谢。
第一种方法:使用 start activity 作为结果而不是 start activity 并在 onActivityResult 中完成它。
第二种方法:在每个需要的activity中注册一个本地广播,并在其接收器中完成它。从 activtity2 发送此广播。这将结束堆栈中注册该广播的所有活动。我已经在许多应用程序中使用这种方法来实现注销,并且效果很好。
好的,这就是我所做的(根据@seema):
在家里activity我在activity.
的OnCreate()方法中注册了一个broadcastreciever
IntentFilter filter = new IntentFilter();
filter.addAction("com.example.CUSTOM_INTENT");
registerReceiver(receiver, filter);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("==>","Broadcast Recieved.");
finish();
}
};
public void finish() {
super.finish();
};
然后在 activity2 我发出广播
Intent local = new Intent();
local.setAction("com.example.CUSTOM_INTENT");
sendBroadcast(local);
这符合我的要求。
因此任何 activity 都可以从任何其他 activity.
中销毁
我开发这个应用程序已经有一段时间了,并且在应用程序中发现了这个错误。最初,当应用程序首次加载时,它从 home activity. 开始,然后用户交互会将应用程序导航到 activity1 使用 fragment1。 fragment1 有一个按钮。如果用户单击该按钮,activity1 调用 finish() 并通过调用 startActivity() 加载 activity2。此外,当用户单击从 fargment1、应用程序 returns 到主页 activity 的硬件后退按钮。
所以这里真正的问题是,当我在 activity2 并完成 () activity 时,应用程序将显示主页 activity。但是我想在从 activity2.
按下时完全关闭应用程序以下是从片段 1 开始 activity2 的代码:
Intent intent = new Intent(context, Activity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
((Activity)context).finish();
我知道主页 activity 从未完成 ()-ed。
那么如何在导航到 activity2 时销毁 activity1 和主页 activity,并使 activity2 只剩下 activity 在申请中?
提前致谢。
第一种方法:使用 start activity 作为结果而不是 start activity 并在 onActivityResult 中完成它。
第二种方法:在每个需要的activity中注册一个本地广播,并在其接收器中完成它。从 activtity2 发送此广播。这将结束堆栈中注册该广播的所有活动。我已经在许多应用程序中使用这种方法来实现注销,并且效果很好。
好的,这就是我所做的(根据@seema):
在家里activity我在activity.
的OnCreate()方法中注册了一个broadcastrecieverIntentFilter filter = new IntentFilter();
filter.addAction("com.example.CUSTOM_INTENT");
registerReceiver(receiver, filter);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("==>","Broadcast Recieved.");
finish();
}
};
public void finish() {
super.finish();
};
然后在 activity2 我发出广播
Intent local = new Intent();
local.setAction("com.example.CUSTOM_INTENT");
sendBroadcast(local);
这符合我的要求。 因此任何 activity 都可以从任何其他 activity.
中销毁