android的dialog方法执行顺序很奇怪,求教!

android的dialog方法执行顺序很奇怪,求教!,第1张

android的dialog方法执行顺序很奇怪,求教!

个人理解:

dialog的di iss方法进入,需要重新整理UI执行绪的时候,UI主执行绪被你sleep了,对dialog的介面处理就变成5秒后主执行绪恢复之后,所以介面上看起来顺序就比较奇怪了。

建议处理方式:

重要事情说三遍:千万不要在主执行绪sleep!千万不要在主执行绪sleep!千万不要在主执行绪sleep!

对于这个需求,可以采取单独开个计时执行绪,然后handler或者broadcast/intent收讯息的办法来实现。

你要起一个新的执行绪,不能让主执行绪sleep5秒,这样你得程式会崩溃的,你在你得按钮事件里写dialog的关闭事件,然后在关闭事件外面,呼叫你执行绪的start方法,在新执行绪的run方法中,写Threadsleep(5000); 和ToastmakeText()show(); 这样就可以了,你试试。。。不行再问我,我再帮你看看

js方法执行顺序?

印刷工人享受到同样的兴奋。

这些半岛从拇指和食指间提取海水

犹如妇人触控庭院里光滑的家当。

地图上的海洋哈哈比陆地更为安逸

java方法执行顺序

先后顺序如下!

1静态块

2块

3构造器

4父类构造器

执行顺序为:

1 静态块

2 父类构造器

3 本类中的块

4 本类的构造器

python 方法执行顺序问题

执行顺序都是从左到右,letterGIrls是字典,setdefault方法如果是不存在girl[0]返回的是空列表[],存在的话返回的是[girl],然后是列表的append方法。这段程式码的目的是把girl[0]相同的girl合并到一个列表。

c#方法执行顺序问题?

A不是初始值吗?也要计算?还是根据A的初始值就算出A 然后在计算出B,在计算出C

怎么控制controller方法执行顺序

如果是方法的话,能不能呼叫还真不知道,没有尝试过。 如果是控制器,可以肯定是不能直接呼叫的,只能跳转。 如果你需要掉的是方法,请抽离出来,不要放在Controller里面,因为这不符合MVC设计的理念。 如果可以,不是执行绪安全的。

java关于方法执行顺序的问题

同时 *** 作?这个得具体情况具体分析一下,如果 *** 作频度很高,可以考虑作个事件伫列。

如果是需要A2对A1提交的资料进行更新,可以在资料记录上加个更新标记栏位,A2对记录时同时更改标记栏位,这样A2每次更新前先检查一下最新记录的标记,确定是否需要更新,如果已更新过说明可能A1还未提交新的资料。

c语言执行顺序 求教

int x=1;

x=(x=1+2,x2);

赋值符号“=”优先级别比“,”逗号表示式要 高

(x=1+2,x2)=>6;

x=6

结果为x=6

用robotium,和android studio写测试用例 怎么调换方法执行顺序

用robotium,和android studio写测试用例的调换方法执行顺序

预设按照字母排序的。A会排在最前面

我们使用element时免不了会使用dialog,使用dialog免不了需要在dialog关闭的时候销毁dialog的元素(比如表单重置和清除表单的校验结果),翻一翻官方文档,发现了 destroy-on-close 这个属性,确实是好用,不过坑也挺多的,下面做一个总结:

1使用 destroy-on-close 属性时,最好封装成一个组件,dialog的数据都维护在该组件中

我们在开发中是不是经常这样做呢?同时我们发现了 destroy-on-close 这个属性,于是自信的加上,一测试,但是发现没有作用,换个用法,我们往dialog里面插入 组件 试试:

我们传入一个 test 组件,测试,你会发现这是有作用的,重新关闭组件和打开组件组件的元素确实销毁了。

翻翻官方文档,文档上是这样写:

可是我们第一个例子确实传入的是元素啊,只能去看一下dialog的源码了。

我们只看关于 destroy-on-close 的属性的部分:

其实,在这里我们已经可以看出一些端倪了,element是基于vue的UI库,vue中通过key作为组件的唯一标识,一旦key更新,就会触发组件的更新。但是dialog的数据是维护dialog的父组件中,而 destroy-on-close 属性是销毁dialog组件及其子元素。

2使用 destroy-on-close 后避免在组件的生命周期函数中发请求

这里指的是数据基本不会变的请求,打开页面只用发起一次就够了,如果你在使用了 destroy-on-close 的组件中的 created 中发起请求,当你关闭d窗时,由于会触发key的更新,所以此时也会发请求,造成不必要的资源浪费。

3替代方案

31 使用 destroy-on-close 的情况下,对于数据量不会变的请求,放到dialog同级的页面发请求,再传值到dialog的组件

32 使用 v-if 代替 destroy-on-close

总结

1能不用 destroy-on-close 就不用,使用 v-if 替代

2一定要用,注意传入的是组件,并且注意dialog的关闭事件,会触发组件的生命周期。

artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口。\x0d\如果你想在d出的对话框里,加一个自己的按钮,来关闭自己,普通对话框可以使用以下方式:\x0d\//artdialogd出对话框之后会返回一个dialog句柄\x0d\\x0d\ var dialog = artdialog(content, ok, cancel)\x0d\ \x0d\//你可以在对话框事件中通过该句柄的close方法,将对话框自己关闭。\x0d\ function closeSelf(){\x0d\dialogclose();\x0d\}\x0d\ \x0d\如果是d出一个iframe对话框呢?获得的对话框句柄在是父窗体里的,需要在子窗体里使用该句柄把自己关掉。\x0d\artdialog提供了框架之间的数据传递方式,你要包含artDialogiframeToolsjs方法。\x0d\ var temp = {};\x0d\artdialogdata('temp', temp);\x0d\tempdialog = artdialog('/childframehtml');\x0d\ \x0d\这样你的数据就穿越了。在childframehtml的js里,你可以使用下面的方式获取自己的窗口句柄,然后关闭自己。

在dialog关闭的时候可以触发pagehide事件,此时可以判断你的localStorage是否有你存的东西

$( document )on( "pagehide", function( event, ui ) {

  var data = windowlocalStorageyourdata;

    if (data) {

    $("input")val(data);

}

});

showMessageDialog没有这个功能,自己定义下才行

JDialog jDialog =new JDialog();

jDialogadd(new JLabel("test"));

jDialogsetSize(300, 100);

jDialogsetLocationRelativeTo(null);

jDialogsetVisible(true);

try {

Threadsleep(3000);

} catch (InterruptedException e) {

eprintStackTrace();

}

jDialogdispose();

1、使用jQuery的delay()函数

定义和用法

delay() 方法对队列中的下一项的执行设置延迟。

语法:

$(selector)delay(speed,queueName)

参数描述

speed    可选。规定延迟的速度。

可能的值:毫秒/"slow"/"fast"

queueName    可选。规定队列的名称。

默认是 "fx",标准效果队列。

funtion open(){

    //开启dialog

    //延迟3秒隐藏/关闭

    $("#id")delay(3000)hide();

}

2、使用定时器

setTimeout()

从载入后延迟指定的时间去执行一个表达式或者是函数;

仅执行一次 ;和windowclearTimeout一起使用

setInterval ("showTime()", 5000);

function showTime()

{

    //此处执行dialog的关闭动作

  var today = new Date();

  alert("The time is: " + todaytoString ());

}

在耗时 *** 作的时候,一般都要d出一个加载框,然后在完成的时候再把加载框关掉,在Flutter中可以直接用showDialog()来d出一个对话框。

这是一个简单的提示对话框,包含了关闭按钮,点击就能关闭。但一般的耗时 *** 作完成,就需要我们自己把dialog关闭掉。

首先,开启dialog的时机。由于我们需要获取到BuildContext,所以就得等build()方法走完,这里可以用Futuredelayed()来等创建好BuildContext再进行创建,或者用Timer来延迟 *** 作,我选择了前者。

其中delayed()在initState()结尾来做就行,这里参考网友封装了一个LoadingDialog。

那么接下来要在什么时机关闭呢?

一开始,我理所当然的以为,是在异步方法结束后,去更新界面的时候关闭,也就是setState(() {})的时候,可是不管怎么尝试,用Navigatorpop()不行,用Navigatorof(context, rootNavigator: true)pop(result)也不行,用FlutterBoostsingletonclose(id)也不行,用FlutterBoostsingletoncloseCurrent()也不行,都会直接把非Dialog的页面也关闭掉,这让我百思不得其解,因为showDialog()的本质也是新建了一个Route出来,也就是最顶层的页面是d出的Dialog,可是为什么关不掉呢。

一番思前想后,把showDialog的逻辑移到和异步逻辑同级,也就是setState(() {})外面,然后把showDialog()自身创建的BuildContext传进去就能正常关闭了。也就是,在setState(() {})的时候,其实用的context还是非Dialog页面的,所以关闭的当然就不是Dialog了。

持有Dialog自己的BuildContext,然后在异步以后调用就行了。

以上就是关于android的dialog方法执行顺序很奇怪,求教!全部的内容,包括:android的dialog方法执行顺序很奇怪,求教!、element destroy-on-close属性使用踩坑、artdialog d出对话框怎么关闭自己等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9565056.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存