在我的活动顶部有一个带有一些按钮的对话框。当用户按下按钮时,发生网络请求,并且应该显示进度对话框。所以一次必须至少有两个对话框,这是不可能的(我猜)。 我在这里看到了两种可能的解决方案:
还有其他选择吗?
答案 0 :(得分:1)
我想这取决于网络请求完成后发生的事情。
从“干净”的角度来看,我建议#1并尽可能保持所有“行动”。这导致可以采取的每个动作的代码段更小。
根据您的需求(在网络请求之后,仍然在对话框内),#2也可能是您的选择。这还需要做更多的工作。在这种情况下,只需在对话框中放入一些(View.INVISIBLE)进度条,并在您的网络请求(希望在AsyncTask中)运行时按需显示/隐藏。同时setEnabled(false)你的按钮。通过用户请求(后退按钮)处理对话框取消。
答案 1 :(得分: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>
然后在代码smth中:
final TableRow tr = (TableRow) findViewById(R.id.progressBarHere);
ProgressBar pb=new ProgressBar(activity);
//...
tr.addView(pb);