1

ユーザーがリストアイテムを長押しした場合は、MapViewでアクティビティを表示する必要があります。このプロセスには時間がかかるため、アプリケーションがハングしている間、ユーザーの進行状況ダイアログを表示したいと思います。コードは次のとおりです。

ListView listView = (ListView) findViewById(android.R.id.list);
listView.setOnItemLongClickListener (new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {
...
  ProgressDialog dialog = ProgressDialog.show(getApplicationContext(), "", "Loading. Please wait...", true);
  Intent intent = new Intent(getBaseContext(), Map.class);
  startActivity(intent);

正しいアプローチを選択しましたか?今すぐさまざまなFCを取得します(ProgressDialog用に選択されたコンテキストによって異なります)。シナリオでProgressBarを表示できますか?

Upd。活動を始める前にトーストを見せてみました。繰り返しになりますが、トーストはマップがすでに表示されている場合にのみ表示されます。何が起こるかわからない。startActivityコードを削除すると、Toastがすぐに表示されます。

4

1 に答える 1

1

MapView の onCreate() で長い準備自体を行っていますか? UIスレッドをブロックするため、そうすべきではありません....

代わりに、Map アクティビティの onCreate() 内で、新しい AsyncTask を生成し (理想的には)、そこに進行状況バーを表示する必要があります (進行状況バーを表示した直後に onCreate() を終了します)。次に、終了後の AsyncTask で (postExecuted() で) 進行状況ダイアログを閉じて、マップを表示する必要があります。PostExecuted() は UI スレッドで実行されるため、プログレス バーを安全に閉じることができます。

あなたが持っている FC と、場合によっては ANR (応答なし) はすべて、UI スレッドの内外で特定のことを行うため、おそらく発生します。UIスレッドでUIコンポーネントを作成/破棄する必要があり、UIスレッドで長時間の操作を実行しないでください。それが経験則です。

于 2011-07-03T14:46:58.873 に答える