在警报对话框中打开自定义对话框

时间:2015-08-08 00:22:50

标签: android android-asynctask dialog alertdialog

好的,这会有点复杂,但请跟我一起。我有以下情况,我无法开始工作:

  1. 提示用户保存(确定或取消)
  2. 在onclick for" ok&#34 ;,执行异步任务以获取一些数据。同步执行此操作
  3. 然后创建一个自定义对话框以显示该数据,以提示用户提供更多信息[此部分不起作用]
  4. 执行另一个我保存数据的异步任务。
  5. 那么,在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();
    

2 个答案:

答案 0 :(得分:0)

为什么你不在你的&#34;独特&#34;中使用viewflipper?定制对话?因此,在第一次单击“确定”后,您可以检查第一页是否可见,然后您可以显示第二页,并且仅在此时如果用户按下“确定”,您可以调用dismiss()方法。

通过这种方式,您可以执行一种向导,如果用户需要更改某些内容,则可以返回第一个视图。有意义吗?

答案 1 :(得分:0)

为了将来参考,我解决这个问题的方法是在第二个对话框的onClick中实际调用AsyncTask。有点丑,但我无法得到任何其他工作。我本以为只要它是一个运行模态对话框,Android会暂停直到它的工作完成 - 它没有,它只是运行下一行代码(第二个AsyncTask)。所以它看起来像:

AlertDialog - &gt;     AsyncTask.get()(所以同步)     客户对话          onClick-&GT;          第二个AsyncTask