HarmonyOS 鸿蒙Next api9下prompt展示时先关闭prompt不走onBackPress方法
HarmonyOS 鸿蒙Next api9下prompt展示时先关闭prompt不走onBackPress方法
onBackPress() {
this.ExitApp();
return true
}
public ExitApp() {
if ((new Date().getTime() - this.exitTime) > 5000) {
Prompt.showToast({ message: "再按一次退出程序" })
this.exitTime = new Date().getTime();
console.log("onBackPress>>>>>>")
} else {
console.log("onBackPress>>>>>>退出应用")
const context = getContext(this) as common.UIAbilityContext;
context.terminateSelf()
}
}
点击返回按钮,弹出消息,Prompt.showToast({message:"再按一次退出程序"}
。再次点击后showToast
消失,没有退出应用,在showToast
消失后,再返回,才会退出应用。
更多关于HarmonyOS 鸿蒙Next api9下prompt展示时先关闭prompt不走onBackPress方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我的是将
showMode:promptAction.ToastShowMode.DEFAULT
解决了这个问题
更多关于HarmonyOS 鸿蒙Next api9下prompt展示时先关闭prompt不走onBackPress方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我也遇到了相同的问题
我看bilibili是用的系统的弹窗,固定存在1秒,退出应用也存在
很多应用都是这样,固定存在几秒,在弹窗存在的时候,按返回键才会退出应用。弹窗消失后,再按返回键,会再次弹窗。就是不知道怎么实现的。
找到一个替代之法:
1、添加一个状态变量:
@State quitRemind: boolean = false;
2、在UI最外层的容器底部添加一个透明Divider:
Divider().color(Color.Transparent).bindPopup(this.quitRemind, {message: '再按一次退出程序'})
3、修改退出方法如下:(此处可自己控制闪现时长 delay)
public ExitApp() {
if ((new Date().getTime() - this.exitTime) > 5000) {
this.exitTime = new Date().getTime();
this.quitRemind = true;
let delay = 500;
let timeoutID = setTimeout(() => {
this.quitRemind = false;;
}, delay);
} else {
const context = getContext(this) as common.UIAbilityContext;
context.terminateSelf()
}
}
看promptAction代码还可弹出对话框、菜单等,那自身也是个实体UI元素了,因此也会捕获交互事件,让promptAction放弃事件捕捉不现实,这样看此问题无解;
不过可考虑缩短显示时长,默认1500ms,人眼捕捉300-400ms左右,所以短点时间也够用了。
我看api,duration最小就是1500。有其他解决方法吗?
你好,这个问题解决了吗
HarmonyOS的分布式技术让我实现了跨设备的无缝协作,工作效率翻倍。
我看了API9与NEXT版本都有这样的问题,像是,如果Toast出现,则按返回键第一步是先取消Toast,第二次才执行onBackPress
。有点问题。
在HarmonyOS鸿蒙系统中,当在API 9版本下使用prompt进行展示时,如果希望在关闭prompt时不触发onBackPress
方法,通常这是因为prompt的关闭行为被系统默认为一种“取消”或“返回”操作,从而触发了Activity或Fragment的返回逻辑。
要解决这个问题,你可以考虑以下几种方法(注意,这些方法基于鸿蒙系统的特性,不涉及Java或C语言):
-
自定义关闭逻辑:在prompt展示时,通过自定义按钮或其他交互方式来关闭prompt,并在关闭的回调中明确不执行
onBackPress
相关的逻辑。 -
拦截返回键事件:如果prompt是通过某种方式(如对话框)展示的,可以尝试拦截Activity或Fragment的返回键事件,判断当前是否正在显示prompt,如果是,则直接关闭prompt而不执行
onBackPress
。 -
使用标志位:设置一个全局或局部的标志位,用于指示prompt是否正在显示。在
onBackPress
方法中检查这个标志位,如果prompt正在显示,则不执行任何返回操作。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,