[英]How to execute one line of code before the rest? Changing text on a button
我的程序中有一个按钮,当单击该按钮时,它会访问一个巨大的数据库并花一两秒钟来完成该操作,然后消失。 在这段等待时间内,我希望按钮的文本更改为“ LOADING ...”或其他内容。 我试过了
myButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
myButton.setText("LOADING...");
//then do other stuff
}
但是当然,代码行不会像这样顺序执行,因此文本不会显示出来(或者在消失之前显示得太快了,以至于不明显)。 有没有简单的方法可以做到这一点? 唯一想到的是使用计时器,但(1)我不太确定如何使用(2)对于仅一行这样的简单代码来说,它似乎过于复杂。
您需要使用AsyncTask进行数据库访问。 在runInBackground()中,您需要设置按钮以显示“正在加载”。 您可以参考此-http://developer.android.com/reference/android/os/AsyncTask.html
http://www.vogella.de/articles/AndroidPerformance/article.html#concurrency_asynchtask也是一个非常不错的教程,可以帮助您完成尝试的工作。
问题是,所有操作都在UI线程上完成,并且长时间的数据库访问会阻塞UI线程并阻止显示“正在加载...”文本。 您应该在UI线程之外执行数据库操作。 阅读http://developer.android.com/resources/articles/painless-threading.html 。
您可以使用处理程序在Db查询完成时通知您,并适当地更改文本。 对于使用处理程序,我参考了本教程
实际上,文本正在更改,只是尚未呈现,请尝试也invalidate()
按钮invalidate()
。 您也可以通过单击按钮后删除冗长的过程来对其进行测试。 另外,如果您的过程很长,请确保其不在主线程上,并可能使用ProgressDialog
当Db开始加载时将其设置为加载,并在加载停止后更改为“完成”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.