android - 如何从另一个活动或底页对话框/fragmenr 关闭一个活动
问题描述
尝试使用 finish()、finishAfinity() 和意图标志清除任务。
//活动A
public class A{
public void finishActivity(){
finish();
}
}
//活动B
public class B{
Activity a = new ActivityA();
a.finishActivity();
}
我希望活动 A 被活动 B 关闭
解决方案
您可以使用广播接收器从 Activity B 关闭 Activity A。使用对象从 B 调用 Activity A 将导致空指针异常。这是因为,当 Activity B 启动时,会调用 Activity A 的 onPause() 方法。
Use BroadCastReceiver as below
BroadCastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent intent) {
String action = intent.getAction();
if (action.equals("finish_activity_a")) {
// Finish activity
}
}
};
然后按如下方式注册您的广播接收器:
try {
//Register BroadcastReceiver
registerReceiver(broadcastReceiver, new IntentFilter(BroadCastActions.actionUpdateAppOptions));
} catch (IllegalArgumentException e){
e.printStackTrace();
}
您可以在上面的 onCreate 方法或 onStart()、onResume()、onRestart() 方法中初始化广播接收器后注册它。
要取消注册您的广播接收器,请执行以下操作:
try {
//Check If BroadCast Was Received
if (broadcastReceiver != null) {
getActivity().unregisterReceiver(broadCastReceiver);
}
} catch (IllegalArgumentException e){
e.printStackTrace();
}
You can UnRegister your broadcast receiver in the onCreate() method or onStop(), onPause(), onDestroy() methods. I hope thi one helps. Feel free to comment below. Good Luck!
推荐阅读
- python - 从存储在python列表中的字符串中清除数据
- c++ - C++子类继承
- python - 从另一个数据帧中减去一个数据帧,不包括第一列 Pandas
- javascript - 在 javascript 中查找常用字符串
- osgi - 将 Sling 调度程序与 Eclipse Equinox 或 OSGI @Reference 规则一起使用
- facebook-graph-api - 获取托管页面列表
- javascript - 对 slack 的 JSON 发布请求返回 invalid_auth
- node.js - 发布节点应用程序
- angular - 仅在用户首次登录时将其重定向到页面
- mysql - 空文本是否占用数据库中的空间