首页 > 解决方案 > 如何从另一个活动或底页对话框/fragmenr 关闭一个活动

问题描述

尝试使用 finish()、finishAfinity() 和意图标志清除任务。

//活动A

public class A{
 public void finishActivity(){
     finish();
 }
}

//活动B

 public class B{

 Activity a = new ActivityA();
     a.finishActivity();
}

我希望活动 A 被活动 B 关闭

标签: androidandroid-fragmentsandroid-activitybroadcastreceiverandroid-fragmentactivity

解决方案


您可以使用广播接收器从 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!


推荐阅读