我是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)
已删除文本编辑器,因此无法保存任何内容。
我希望我足够清楚。
答案 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的答案。
希望这有帮助!