警报对话框弹出后期

问题描述:

/*我有一些奇怪的问题,里面OnMenuItemClickListener,我打电话,我提出一个警告对话框,但它似乎是,当我打电话警告对话框中,它并不表明它在适当的时机,只有经过onMenuItemClick完成。我在做什么? */警报对话框弹出后期

class MyListMenuListener implements OnMenuItemClickListener 
    { 

     private String TAG; 

     @Override 
     public boolean onMenuItemClick(MenuItem item) 
     { 
      if (item.getItemId() == saveRoute.getItemId()) 
      {     
       alertDialogSaveFile(); 
       //nameInput = "testone.txt"; 
       //some operations 
//          ... 
//          return true; 
      } 

// ...

/*the wierd thing is that the alert dialog doesnt show up on the same moment i call it.. 
only after the onMenuItemClick operation ends (with return) 
and this is how my alertdialog looks like:*/ 

     private void alertDialogSaveFile() 
{ 

AlertDialog.Builder alert = new AlertDialog.Builder(this); 
     alert.setTitle("Save your current map"); 
     alert.setMessage("Please insert name for this route"); 
     final EditText saveNameInput = new EditText(TwittListActivity.this); 

     alert.setView(saveNameInput); 
     alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface dialog, int whichButton) 
      { 
       nameInput = saveNameInput.getText().toString(); 
      } 
     }); 

     alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface dialog, int whichButton) 
      { 
      } 
     }); 
     AlertDialog ad = alert.create(); 
     ad.show(); 
    } 


//Thanks! 
//ray. 
+0

我明白你的意思,但这样做很不合逻辑,而不是一个“整齐”的编码,不可能是其他方式,然后推动okClick内的一切? – rayman 2010-01-29 12:42:57

对话框中的Android是不同步的,所以它很可能是在UI线程正在创建之前完成onMenuItemClick() /显示你的对话(对话是由封闭Activity管理)。

编辑:我误解了你的部分问题。保持对alertDialogSaveFile()的调用,并将实际保存文件的代码放入onClick()处理程序中。由于Android的对话是不同步的,则需要在对话框回调本身执行保存操作。这不是可以显示一个对话框,等待用户响应,然后拿从对话框的结果。