今天倒腾一下那个进度提示的东西,就是以前咱们经常用的ProgressDialog
。
我就是想在做一个网络请求的时候,给用户一个提示,告诉他“正在加载,别急”。脑子里第一个蹦出来的就是ProgressDialog
,毕竟用那么多年,顺手得很。
我就按照老习惯,准备在代码里直接new
一个ProgressDialog
出来,设置个提示文字,比如“正在拼命加载中...”,然后调用show()
方法,想着几行代码就搞定,简单快捷。
遇到的情况
结果?代码敲上去,编辑器就给我画个删除线,提示说这玩意儿被弃用!我当时心里“咯噔”一下,啥情况?这么好用的东西怎么就不用。
不死心,我还是跑一下程序,确实能跑,样子也还是那个老样子,一个灰色的框框,中间一个转圈的菊花,加上我设置的文字。但是那个删除线看着实在膈应,而且官方都说弃用,肯定有它的道理,咱也不能老抱着旧东西不放。
找替代方案
于是我就去查查,现在都推荐用啥来替代。网上搜一圈,大概有这么几种说法:
- 直接用
ProgressBar
控件,把它放在布局文件里,需要显示进度的时候就让它显示出来,不需要就隐藏掉。 - 用
AlertDialog
来自定义一个加载中的对话框,灵活性更高,想做成啥样都行。 - 还有推荐用
DialogFragment
来管理这个加载框的生命周期,据说更规范。
看看,DialogFragment
感觉有点小题大做,我就想简单显示个加载状态。AlertDialog
自定义倒是挺灵活,但是也得多写不少布局和代码。
最终的选择和实践
我决定试试最简单的方案,就是用ProgressBar
。
实践过程大概是这样的:
- 先在我的界面布局文件(XML)里,加一个
ProgressBar
控件。一开始我让它是隐藏的(visibility="gone"
)。 - 然后在我的代码里,找到这个
ProgressBar
。 - 在开始网络请求之前,我把这个
ProgressBar
的可见性设置成VISIBLE
,它就显示出来开始转圈。 - 等网络请求成功或者失败,总之就是结束的时候,再把它的可见性设置回
GONE
,它就又隐藏起来。
这么一搞,效果也差不多,界面上多一个小小的转圈动画,提示用户正在加载。关键是,这么做代码里没有那个弃用的警告,心里踏实多。
感觉,虽然ProgressDialog
用起来是简单粗暴,直接弹个框,但确实有点影响用户体验,有时候用户可能还想看看后面的内容。用ProgressBar
嵌入到布局里,就显得自然多,不打断用户的操作流。
虽然一开始有点不习惯,但试试新的ProgressBar
方式,发现也挺好用的。以后做加载提示,我估计就直接用ProgressBar
或者根据需要用AlertDialog
来自定义,ProgressDialog
这老伙计,是时候跟它说再见。