2012-03-15 29 views
0

私はListActivityを使用してユーザーにアクションのリストを提供するアプリケーションを持っています。彼らが1つをクリックすると私は別の活動を開始するのにIntentを使います。AsyncTaskをListActivityで使用して画面を表示する

私の問題は、アプリケーションが実行するアクションが約20秒かかることです。ユーザーがその厄介なANRダイアログを受け取らないようにするために、AsyncTaskを使用して、平均時間。私はonPreExecute()setContentView(R.layout.loading);を使用しようとしましたが、NullPointerExceptionをスローしました。実際には、が「android.R.id.listのListView」ではないことがわかっています。

ここで何ができますか?どのように画面を読み込むことができますか?このかなり迷惑な状況の周りに道がありますか?どんな助けでも大歓迎です。ありがとう!

答えて

1

あなたの使用例が正確であるかどうかはわかりません。すぐに入力されたアイテムのリストがあり、選択するとアクションが実行されますか?実行されるアクションは、バックグラウンド処理を実行する別のアクティビティを開始することです。

また、アクションのリストを作成するのに時間がかかりますか?

前者の場合、インテントの代わりに長時間実行されるアクティビティに対してAsyncTaskを使用して、別のアクティビティを起動することができます。コールバックで問題のアイテムをクリックし、AsyncTaskを作成し、 doInBackgroundでは、長期実行アクティビティーを実行し、必要に応じてonPostExecuteを使用してリストをリフレッシュまたは操作します。

新しいアクティビティを起動する前にロードが必要な場合は、ダイアログボックスを使用して読み込み画面を表示することも検討してください。

あなたのユースケースをさらに詳しく説明できれば、もっとお手伝いできます。

+0

詳細な説明をありがとうございました。私はアプリを起動した直後にリストが読み込まれます。ユーザーがリストからオプションを選択すると、長いプロセスが実行されます。私はすぐにダイアログボックスのアプローチを検討します。私はこれを試す前に一つのことを知りたいです...長いバックグラウンド処理が終わった後にonPostExecuteは実行されませんか? – Drider

+0

長いプロセスでユーザーに何かを表示する必要がありますか?完了したら、彼らはリストに戻ったり、どこかに行きますか? –

+0

私の状況は少し変わりました...ローディング画面を簡単に表示できるようになりましたが、私は少し盲目的だったので、大部分の処理は新しいアクティビティで行われています。だから私は長い操作のためにAsyncTaskを実装しましたが、 'setContentView'が' super.onCreate() 'で使われる最初の行であっても、私の活動は、どんな種類のインターフェースも表示しません。私もonPreExecute()でsetContentViewを使用しようとしましたが、違いはなく、理由を理解できません。 – Drider

0

これはAsyncTaskに必要な読み込み画面ではなく、20秒間のアクティビティの初期化です。私は、ユーザが他のアクティビティで気楽に遊ぶことができる間に、サービス内のバックグラウンドスレッドですべての設定を行う方法を探します。私は20秒間ユーザーをストールさせない方法を見つけようとしています。たぶんそれらをターゲットアクティビティに持って行き、最後の訪問からキャッシュされたデータを新しいセットが準備できるまで表示します。

+0

あなたの答えをありがとう。それは意味をなさない。それは、 'doInBackground()'と 'onPreExecute()'の両方でインテントを使うことを伴うでしょうか? – Drider

0

呼び出されているアクティビティのonCreate()にロードダイアログを表示してから、AsyncTaskのonPostExecute()でDialog.dismiss()を呼び出します。

関連する問題