网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月24日
漏签
0
天
aide吧
关注:
33,054
贴子:
273,022
看贴
图片
吧主推荐
游戏
1
2
下一页
尾页
47
回复贴,共
2
页
,跳到
页
确定
<<返回aide吧
>0< 加载中...
[抛砖]粗糙的实现了AlertDialog异步加载数据
只看楼主
收藏
回复
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
(本来想写个延时加载当标题,然后觉得还是异步加载有逼格)
如题,可以用在类似如图的场合,setView 时读取数据耗时较长,如果不异步加载就会导致按钮点击老半天没反应,我个人觉得这是比较蛋疼的。
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我觉得实现的还相当烂,确实也是相当烂,刚刚不知道为什么我的对话框跑不起来了,Logcat 上说是因为〔非UI线程不允许对WebView 〕操作……
我嘞个XXXXXX,如果是为了安全TM不会另提供个SafeWebView 或者给WebView 加个boolean useSafeMode!!!??
A~~谷歌编程也招临时工了?
当然可能是因为别的问题,因为一开始是可用的,AIDE升到2.8.1 我重编译了一下第一次运行也是OK
2025-07-24 01:10:35
广告
不感兴趣
开通SVIP免广告
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
来讲讲用法吧,非常简单,大概类似如图
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
实现LazyDialog 内的ViewNurse 里面有个abstract loadViewData 方法,通过ViewNurse 的getPatient 方法得到请求数据的LazyDialog 对象,在loadViewData 内通过dialog 的findViewById 方法得到需要需要设置的View 对象,然后就加载数据。
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
创建时要调用使用Builder2对象,Builder 对象出来的只是个AlertDialog。
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
使用Builder2 的setViewNurse 设置你实现了的ViewNurse,不要忘记setView ,这时setView 就不用把所有数据一通加入了,比如,ListView 的Adapter 你就可以放到ViewNurse 里去设置。
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这是实现ViewNurse 后,Dialog 已显示数据WebView 数据没有加载时的样子
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
等一会后台线程执行loadViewData结束后就会变成一楼那幅图的样子
2025-07-24 01:04:35
广告
不感兴趣
开通SVIP免广告
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
为了不让用户误会死机了,可以给布局文件里加一个ProgressBar,初始时显示,WebView设置完成后在loadViewData 里setVisibility(View.GONE)就能隐藏掉它,然后WebView 就出来了
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
加了ProgressBar 后的初始效果
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
但WebView loadData 结束和它能显示出来之间还有一段时差,所以会出现ProgressBar 消失而WebView 还要等一会才出现的情况
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
A~~忘了说调用链了,其实源码里一看就能清楚。
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
(其实Dialog 的onStart方法是它的show方法调用的……isShowing 也是show 的时候设置为true.)
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
调用链:
设置ViewNurse 后,当外部调用LazyDialog 的show 时……
show -> ViewNurse.prepare(LazyDialog) -> ViewNurse.start() -> ViewNurse.loadViewData() ( run() )
2025-07-24 00:58:35
广告
不感兴趣
开通SVIP免广告
九方观夜
英雄豪杰
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
ViewNurse 继承了Thread ,它调用prepare 时,它将传入的参数视为需要饥渴的LazyDialog,启动新线程,由新线程调用实现了的loadViewData 方法,在loadViewData 内调用getPatientDialog 获得prepare 时传入的LazyDialog对象,调用LazyDialog 的findViewById方法获得饥渴的View 对象,然后设置View 的数据,比如,对于ListView 来说这一步应该是为它添加Adapter, 某些时候还要调用View 的invalidate 方法显示新的数据,然后就OK了,其他效果要在布局文件里实现
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示