2

私はアンドロイドプログラミングが初めてで、バックグラウンドで長いタスクを実行する必要性について質問があります。アクティビティ A のリストビューにフォーラム トピックのリストを表示するこのアプリケーションがあり、ユーザーがこのリストの項目をクリックすると、この項目に関する情報をアクティビティ B に表示する必要があります。これにはテキストと画像が含まれます。

現在、この情報は Web から取得されています。これはコミュニケーション タスクなので、何らかのサービスに入れる必要があります。そうしないと、ANR が発生する可能性があります。

私の質問は、情報を受け取るまでどうすればよいかということです。すべての情報を取得する前にアクティビティ B を表示することはできないため、Web から情報を取得するまでアクティビティ A で「ハング」する必要があります。

このような一般的なフローの適切な設計パターンについて誰か教えてもらえますか? もちろん、いくつかのコードも非常に役立ちます。

前もって感謝します。

4

4 に答える 4

2

ユーザーがアクティビティ A の項目をクリックすると、アクティビティ B が起動します。パラメータをアクティビティ B のインテントに渡して、詳細ビューの対象にします。たとえば、アクティビティ A には惑星がリストされています。ユーザーが「Venus」をクリックし、パラメータ「Venus」でアクティビティ B を開始するインテントを起動します。

その後、アクティビティ B は、アクティビティ B で Venus について表示する必要があるすべての情報をサーバーにクエリする AsyncTask を起動します。クエリ中に、進行状況バーを表示できます。サーバーからの JSON 応答の解析が完了したら、アクティビティ B を Venus 情報で更新します。

AsyncTask の使用例へのリンクを次に示します。レイアウトした例に従って、ProgressBar を に表示しonPreExecuteます。次に、 でサーバーにクエリを実行しますdoInBackground。次に、アクティビティ B を Venus 情報で更新し、ProgressBar を非表示にしますonPostExecute

于 2014-01-09T09:31:45.240 に答える
2

サーバーからすべてのデータをダウンロードするには、android AsyncTaskを使用する必要があります。また、ユーザーが待っている間、進行状況バーを表示できます。

私が共有したリンクで例を見つけることができます。

于 2014-01-09T09:32:29.240 に答える
2

なんらかの方法で、Web データの取得の進行状況を表示する必要があります。これは、実際には UI 設計に依存します。ProgressDialog、またはリスト項目に回転するドローアブルを表示できます。これは、この間に何を許可するかによっても異なります。他の項目の選択が許可されている場合は、以前のダウンロードをキャンセルして新しいダウンロードを開始する必要があるため、複雑さが増します。

また、サーバーにアクセスできず、接続に 1 分もかかって失敗する場合もあります。また、接続が非常に遅い場合があります。このような場合、ユーザーは、GUI のボタンを押すか、戻るボタンを押して、操作をキャンセルしたい場合があります。これは、ProgressDialog を使用している場合に意味があります。

他の解決策は、詳細が表示される場所に新しいアクティビティを表示し、代わりに大きな回転ホイール (不確定な進行状況のドローアブル) を表示することです。[戻る] を押すと、ダウンロードがキャンセルされ、前のアクティビティ/フラグメントに戻ります。

于 2014-01-09T09:34:11.270 に答える
2

ASYNC TASK を調べることができます。リストビューで URL から画像をロードする方法の例を確認してください。このような例では、json 形式で URL を取得し、配列リストに解析して listview に保存します。

于 2014-01-09T09:27:11.390 に答える