2010-09-23 122 views
1

我有一个在for循环内的switch case语句中创建的AlertDialog。在AlertDialog上有一个用于输入的EditText。当弹出框时,for循环会在后台运行。我希望循环等到发送输入继续。下面是AlertDialog代码:AlertDialog不会等待输入

for(int i=0; i < code.length(); i++){ 
     switch(code.charAt(i)){ 
       case '+': 
        bytes[index]++; 
        break; 
       case '-': 
        bytes[index]--; 
        break; 
       case '<': 
        if(index > 0){ 
         index--; 
        }else{ 
         Toast.makeText(this, "Warning: Index is already at zero", Toast.LENGTH_LONG).show(); 
        } 
        break; 
       case '>': 
        if(index <= 500){ 
         index++; 
        }else{ 
         Toast.makeText(this, "Warning: Maximum bytes reached", Toast.LENGTH_LONG).show(); 
        } 
        break; 
       case ']': 
        if(loop == -1){ 
         Toast.makeText(this, "ERROR: Close bracket before an open bracket!", Toast.LENGTH_LONG).show(); 
         errors++; 
         break; 
        }else{ 
         if(bytes[index] == 0){ 
          loop = -1; 
         }else{ 
          i = loop; 
         } 
         break; 
        } 
       case '[': 
        loop = i; 
        break; 
       case '.': 
        stdout(Character.toString((char)bytes[index])); 
        break; 
       case ',': 
        AlertDialog.Builder alert = new AlertDialog.Builder(this).setCancelable(false); 

        alert.setTitle("Enter Character"); 
        alert.setMessage("Script is requesting input"); 

        final EditText input = new EditText(this); 
        InputFilter[] FilterArray = new InputFilter[1]; 
        FilterArray[0] = new InputFilter.LengthFilter(1); 
        input.setFilters(FilterArray); 

        alert.setView(input); 

        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          setByte(input.getText().toString().charAt(0)); 
         } 
        }); 

        alert.show(); 
        break; 
       } 
       if(errors > 0){ 
        break; 
       } 
      } 
+2

向我们展示整个代码。 for/switch语句。这听起来像你做错了。请注意,在显示AlertDialog之后调用alertdialog是异步 – Falmarri 2010-09-23 21:33:12

+1

,代码将继续运行,并且不会“等待”,直到在AlertDialog上执行操作为止 – binnyb 2010-09-23 21:36:42

+0

嗯,我已经发现AlertDialog不会暂停,直到驳回。我想知道如何让它暂停直到被解雇。 – Fsmv 2010-09-23 21:58:38

回答

7

正如其他人所说,Android的对话框不是模态(这是说,他们不会阻止后台进程)。阅读我的blog post了解如何通过注册回调来解决此问题。

+0

不完全是我需要的,但它让我思考,我想我可以用类似的方法想出一个解决方案。我会尽量计算它的大部分内容,然后等待打印结果,直到侦听器被调用。 – Fsmv 2010-09-24 01:05:01

+0

感谢您的博客文章。它表明你不能暂停程序,为什么。所以我选择了一种不同的方法,现在它可以工作! – Fsmv 2010-09-24 22:34:26

+0

优秀 - 您选择的方法是什么? – I82Much 2010-09-24 22:40:13