2011-01-24 29 views
1

アクティビティの上部にいくつかのボタンがあるダイアログボックスがあります。ユーザーがボタンを押すと、ネットワーク要求が発生し、進捗ダイアログが表示されます。したがって、一度に少なくとも2つのダイアログがなければなりません(これは可能ではありません)。 私はここ2つの可能な解決策を参照してください。同時に複数のダイアログ

ボタンが押された
  • 、メインダイアログを隠し、
  • は、単一のダイアログにポップアップするすべてのものをラップし、手でそれを管理する進捗ダイアログを表示し

他の選択肢はありますか?

答えて

1

私は、ネットワーク要求が行われた後に何が起こっているかによって変わってくると思います。

「きれいな」ビューから、私は#1をお勧めし、すべての「アクション」をできるだけ別々にしておきます。これは、取ることができる各アクションのためのより小さいコードセグメントにつながる。

必要に応じて(ネットワーク要求の後でも、まだダイアログの中にいる)、#2も行くことができます。それはもっと多くの仕事をするだけです。この場合、ネットワークリクエスト(AsyncTaskでうまくいけば)が実行されている間に、いくつかの(View.INVISIBLE)プログレスバーをダイアログの中に入れ、必要に応じて表示/非表示にしてください。また、その時間のボタンをsetEnabled(false)します。ユーザ要求によるダイアログキャンセル(バックボタン)に注意してください。

+0

ダイアログは、静的ではありません - 彼らは、サーバからロードされています。アクティビティー・コンテンツ・ビューも表示されます。ようなブラウザのような。だから、次のアプリケーションを待っている間は、アプリケーションの完全な前の状態を見ることができることが重要です。 – note173

+0

[OK]を、これについては何か:あなたはダイアログを使用しないで、あなたはダイアログのように見えるアクティビティを使用します。これを行うには、そのアクティビティのマニフェストに 'android:theme =" @ android:style/Theme.Dialog "'を追加します。あなたのアクティビティはもうフルスクリーンではなく、呼び出しアクティビティをオーバーレイします。あなたの偽の "DialogActivity"を使ってProgressDialogを呼び出すことができます。 – Oliver

+0

私の質問を再開する - 私は同時に2つのダイアログを表示しているので(それでも可能です)しかし、それらのzオーダーは、作成された順番に依存するように見えます(show() 'n、createdではなく)。私の待っているダイアログを毎回作り直したくない...注文をどのように変更するか考えている? – note173

0

はい、別のオプションがあります。動的に(実行時に)ProgressBarをダイアログに追加してから、ProgressBar完了直後に削除します。

<TableLayout 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:stretchColumns="*"> 
<TableRow> 
    <TextView 
     android:text="@string/myText" 
     /> 
</TableRow> 
<TableRow android:id="@+id/progressBarHere"/> 
<TableRow> 
    <Button 
     android:id="@+id/ok" 
     android:text="@string/ok" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
      /> 
    <Button 
     android:id="@+id/cancel" 
     android:text="@string/cancel" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
      /> 
</TableRow> 
</TableLayout> 

は、その後、コードなめらかでのように:

final TableRow tr = (TableRow) findViewById(R.id.progressBarHere); 
ProgressBar pb=new ProgressBar(activity); 
//... 
tr.addView(pb); 
+0

ああ、ありがとう、それは複雑すぎるだろう - 「待ってください」ダイアログは、ダイアログが表示されていない(ほとんどの場合、それはそうである)ときに到着するかもしれないし、唯一の方法は、他のものが埋め込まれた状態でダイアログとして「オーバーレイ」ビューを表示することです。 – note173

+0

ところで、メインコンテンツの独立した生活をしている「オーバーレイ」を作る良い方法はありませんか?それはダイアログの絵がアンドロイドで最適化されていないようです – note173

+0

私は私の答えのコメントでハウツー語った;) – Oliver

関連する問題