为什么下一条指令会立即执行?

时间:2012-08-13 18:42:15

标签: android android-edittext

我是Android的新手,我遇到了问题,请看下面的代码:

new AlertDialog.Builder(this)
  .setTitle("Save File")
  .setMessage("Do you want to save to a file ?")
  .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
          // Ask user for a file name to save the text in the text editor.
          PreSaveFile();

          // Clear text editor. 
          // This is executed immediately and it does not wait until PreSaveFile() ends.
          CleanEditor(et);
        }
    })
.setNegativeButton("No", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        CleanEditor(et);
    }
})

问题是第二次调用CleanEditor(et)不等到PreSaveFile()结束,所以当我选择文件名来保存文本编辑器中的内容时,CleanEditor(et)已删除文本编辑器,因此无法保存任何内容。

我希望我足够清楚。

2 个答案:

答案 0 :(得分:3)

如果PreSaveFile显示一个输入文件名的对话框,它将不会等待对话框解除并继续执行,因此PreSaveFile结束并执行CleanEditor。

你必须在创建PreSaveFile()的对话框中添加一个监听器,并在该监听器中调用CleanEditor(et);

答案 1 :(得分:0)

首先我会发布你的PreSaveFile()函数,以便它更具可读性:

private void PreSaveFile() { 
    EditText et = (EditText)findViewById(R.id.editText1); 
    if (et.length() == 0) { 
        Toast.makeText(getBaseContext(), "Editor is empty!", Toast.LENGTH_SHORT).show(); 
    } 
    if (textFile.length() == 0) { 
        Intent i = new Intent(MainActivity.this, FileChooser.class); 
        Bundle myData = new Bundle(); 
        myData.putString("textFile", ""); 
        i.putExtras(myData); 
        startActivityForResult(i, 1); 
    } else { 
        SaveFile(); 
    } 
} 

我想在此提出两点:

1)您是否检查过以确保您的代码遵循您假设的执行路径?特别是,您是否检查过testFile.length()确实为0,以便代码进入if()而不是else()?

2)更重要的是,startActivityForResult启动活动以执行异步,如this question的答案所示。您希望在获得结果后执行的任何代码都应放在onActivityResult()回调中,请参阅this question的答案。

希望这有帮助!