0

我是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)删除了文本编辑器,所以什么都不能保存。

我希望我足够清楚。

4

2 回答 2

3

如果 PreSaveFile 显示输入文件名的对话框,它不会等待对话框关闭并继续执行,因此 PreSaveFile 完成并执行 CleanEditor。

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

于 2012-08-13T18:51:34.870 回答
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()回调中,请参阅此问题的答案。

希望这可以帮助!

于 2012-08-14T13:58:10.177 回答