如何从另一个活动或底部工作表对话框/片段中关闭一个活动

Posted

技术标签:

【中文标题】如何从另一个活动或底部工作表对话框/片段中关闭一个活动【英文标题】:How do I close an activity from another activity or bottomsheet dialog / fragmenr 【发布时间】:2019-07-02 21:39:04 【问题描述】:

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

//活动A

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

//活动B

 public class B

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

我希望 Activity A 被 Activity B 关闭

【问题讨论】:

你想从后台移除ActivityA吗? 不,我不想。 【参考方案1】:

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


您可以在 onCreate() 方法或 onStop()、onPause()、onDestroy() 方法中取消注册广播接收器。 我希望这有帮助。欢迎在下方发表评论。祝你好运!

【讨论】:

以上是关于如何从另一个活动或底部工作表对话框/片段中关闭一个活动的主要内容,如果未能解决你的问题,请参考以下文章

将数据从底部工作表对话框片段传递到片段

Android:如何从活动活动中关闭前台活动?

如何在线程中关闭 QWebSocket?

应用程序在主要活动中关闭onBackPressed

如何从父关闭按钮单击事件打开的子对话框中关闭父对话框?

从底部工作表对话框片段中获取价值