将DialogFragment放在所有活动的前面(即使是显示DialogFragment之后创建的活动)

时间:2019-07-19 10:07:45

标签: android kotlin android-dialogfragment

我有一个DialogFragment,以某种形式显示,它代表一个解锁请求以解锁对应用程序的访问。

我的应用中有一个场景,我开始一个活动,如果满足某些条件,它会显示DialogFragment(从BaseActivity启动)要求销钉,但与此同时Activity A再启动一个Activity B,然后DialogFragment紧随其后。

事件的顺序是

  

1- ActivityA已启动

     

2-显示了DialogFragment

     

3- ActivityA启动ActivityB,而DialogFragment落后。

即使在片段出现后开始新的活动,我也想将DialogFragment放在所有内容的前面。

companion object {
    fun newInstance(cancelable: Boolean = false): LockCodeFragment {
        val frag = PinCodeFragment()
        frag.isCancelable = cancelable
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            frag.dialog?.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
            frag.dialog?.window?.setFlags(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
        } else {
            frag.dialog?.window?.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
            frag.dialog?.window?.setFlags(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
        }
        return frag
    }

当我实例化该片段时,我试图将对话框设置为具有类型系统警报或应用程序覆盖,但是没有成功。

有没有办法让DiaglogFragment摆在一切面前?

3 个答案:

答案 0 :(得分:1)

正如我在评论中所述,这是不可能的,因为片段是由FragmentManager管理的,SharedPreferences对于每个活动都是唯一的。我认为最好的办法是记住该片段是否显示在某个位置(使用Application甚至是import json import requests import http.client headers = { 'Connection': 'Keep-Alive', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json', 'Authorization': 'Basic XyXyXyXyXyXyXyXyXyXyXy=', 'Content-Length': '105', 'Host': 'login.random.com' } body = { 'grant_type': 'password', 'username': 'xxx', 'password': 'xxxx', 'scope': 'random.api.external' } response = requests.post('https://login.random.com/connect/token', headers=headers, data=body) 子类中的字段),然后在另一个活动开始时,检查该值是否可能再次显示对话框。

答案 1 :(得分:0)

view.bringToFront()

使视图成为现实

答案 2 :(得分:-1)

  1. 创建BaseActivity。
  2. 在BaseActivity中添加对话框显示条件
  3. 使用BaseActivity扩展所有其他活动。
  4. 防止对话框关闭,如下所示

要防止对话框在按下返回键时被关闭,请使用此

dialog.setCancelable(false);

要防止对话框因外部触摸而被关闭,请使用此

dialog.setCanceledOnTouchOutside(false);