好的,这会有点复杂,但请跟我一起。我有以下情况,我无法开始工作:
那么,在AlertDialog中创建自定义Dialog是否存在固有问题?
发生的行为是所有操作都在运行,最后自定义Dialog会短暂显示然后消失。它应该在最后一个Async任务之前显示,并且在收集所需数据之前不要让Async任务执行。
我已将问题代码简化为:
AlertDialog.Builder submitDialog = new AlertDialog.Builder(this);
submitDialog.setMessage("Are you sure you want to end this Preview of the form? It will no longer be availabe for editing");
}
else {
submitDialog.setTitle("Submit?");
submitDialog.setMessage("Are you sure?");
}
submitDialog.setNegativeButton("Cancel", null);
submitDialog.setPositiveButton("OK", new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int arg1) {
// =============================
// 1st Async
// =============================
// Make synchronous since need data. Must be a task cause hitting server
Test test = null;
try {
test = new workflowTask().execute().get();
}
catch (Exception ex) {
// nothing
}
// =============================
// Customer Dialog Get more info
// =============================
// Prompt for data here...
String[] listContent = {"test1@test.com", "test2@test.com"};
// custom dialog
Dialog dialog = new Dialog(MyActivity.this);
dialog.setContentView(R.layout.dialog_email_picker);
dialog.setTitle("Select email and enter comments");
ListView emails = (ListView) dialog.findViewById(R.id.emaillist);
ArrayAdapter<String> adapter = new ArrayAdapter<String> (MyActivity.this, android.R.layout.simple_list_item_1, listContent);
emails.setAdapter(adapter);
emails.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(), parent.getItemAtPosition(position).toString() + " clicked", Toast.LENGTH_LONG).show();
}
});
Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "ok clicked", Toast.LENGTH_LONG).show();
}
}
});
dialog.show();
// =============================
// 2nd Async
// =============================
new submitFormResultTask().execute();
}
}
});
submitDialog.show();
答案 0 :(得分:0)
为什么你不在你的&#34;独特&#34;中使用viewflipper?定制对话?因此,在第一次单击“确定”后,您可以检查第一页是否可见,然后您可以显示第二页,并且仅在此时如果用户按下“确定”,您可以调用dismiss()方法。
通过这种方式,您可以执行一种向导,如果用户需要更改某些内容,则可以返回第一个视图。有意义吗?
答案 1 :(得分:0)
为了将来参考,我解决这个问题的方法是在第二个对话框的onClick中实际调用AsyncTask。有点丑,但我无法得到任何其他工作。我本以为只要它是一个运行模态对话框,Android会暂停直到它的工作完成 - 它没有,它只是运行下一行代码(第二个AsyncTask)。所以它看起来像:
AlertDialog - &gt; AsyncTask.get()(所以同步) 客户对话 onClick-&GT; 第二个AsyncTask