0

私のプログラムには、クリックすると巨大なデータベースにアクセスし、それを行うのに 1 ~ 2 秒かかり、その後消えるボタンがあります。その待ち時間の間に、ボタンのテキストを「LOADING...」などに変更したいと思います。私は試した

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

しかしもちろん、コード行はそのように順番に実行されるわけではないので、テキストは表示されません (または、すぐに表示されてから消えてしまいます)。これを行う簡単な方法はありますか?頭に浮かぶ唯一のことはタイマーを使用することですが、(1)方法がよくわかりません。(2)そのような単純なコードの1行だけでは非常に複雑に思えます。

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 スレッドをブロックし、"Loading..." テキストが表示されないことです。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 がロードを開始したときにロードするように設定し、ロードが停止したときに Finished に変更します。

于 2011-08-04T22:07:45.107 に答える