0

在我的程序中有一个按钮,当点击它时,它会访问一个巨大的数据库并需要一两秒钟的时间来完成它,然后消失。在等待期间,我希望按钮的文本更改为“正在加载...”或其他内容。我试过

myButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        myButton.setText("LOADING...");
        //then do other stuff
    }

但是当然代码行不会像那样按顺序执行,因此文本不会显示(或者,在消失之前显示得太快以至于不明显)。有没有一种简单的方法可以做到这一点?唯一想到的是使用计时器,但是(1)我不确定如何使用,(2)对于这样的简单代码行来说,这似乎过于复杂。

4

5 回答 5

2

您需要使用 AsyncTask 进行数据库访问。在 runInBackground() 中,您需要将按钮设置为显示“正在加载”。你可以参考这个 - http://developer.android.com/reference/android/os/AsyncTask.html

http://www.vogella.de/articles/AndroidPerformance/article.html#concurrency_asynchtask也是一个非常好的教程,可以帮助您完成您正在尝试做的事情。

于 2011-08-04T22:06:02.517 回答
1

问题是一切都在 UI 线程上完成,而长时间的数据库访问会阻塞 UI 线程并阻止显示“正在加载...”文本。您应该在 UI 线程之外执行数据库操作。阅读http://developer.android.com/resources/articles/painless-threading.html

于 2011-08-04T22:05:45.883 回答
0

您可以使用 Handler 在 Db 查询完成时通知您并适当地更改文本。对于使用处理程序,我参考了本教程

于 2011-08-04T22:04:30.417 回答
0

实际上文本正在改变,它还没有被渲染,invalidate()也试试按钮。您也可以通过在单击按钮后删除漫长的过程来对其进行测试。此外,如果您的流程很长,请确保它不在主线程上,并可能使用ProgressDialog

于 2011-08-04T22:05:45.427 回答
0

将其设置为在 Db 开始加载时加载,并在加载停止时更改为已完成。

于 2011-08-04T22:07:45.107 回答