我有一个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
摆在一切面前?
答案 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)
要防止对话框在按下返回键时被关闭,请使用此
dialog.setCancelable(false);
要防止对话框因外部触摸而被关闭,请使用此
dialog.setCanceledOnTouchOutside(false);