我正在使用ArrayAdapter来填充ListView。选择和项目后,它会显示确认Y / N对话框。如果用户的选择是否定的,那么他应该能够选择显示相同对话框的另一个项目。等等。
这是我的代码:
lView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(final AdapterView<?> parent, final View v, final int index, final long id) {
Toast.makeText("Selected file"+ mFiles.get(index).getfileName(),
Toast.LENGTH_SHORT).show();
SelectedFile = mFiles.get(index);
showDialog(DIALOG_CONFIRMIMPORT_ID);
}
});
奇怪的是,虽然“Toast”每次都显示被点击的项目,但只有自“活动”启动以来的第一个选定项目才会传递给“SelectedFile”。无论您点击不同项目多少次,“SelectedFile”始终采用相同的值,即第一个单击项目的值,在此代码之外。
Heres是我的Dialog代码:
Protected Dialog onCreateDialog(int id) {
switch(id) {
case DIALOG_CONFIRMIMPORT_ID:
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
String message = String.format(getString(R.string.importstudentfileconfirm),SelectedFile.getfileName());
builder.setMessage(message)
.setCancelable(false)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Activity.this.finish();
// startActivity(new Intent(Activity.this, LOL.class));
}
})
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
SelectedFile = null;
dismissDialog(DIALOG_CONFIRMIMPORT_ID);
mFiles.notifyAll();
}
});
AlertDialog alert = builder.create();
return alert;
}
}
return null;
}
非常感谢您的帮助!
答案 0 :(得分:1)
我猜这与onCreateDialog方法仅在第一次创建对话框时调用的事实有关。因此,第一次看到对话框时,它将具有正确的文件名。
调用onCreateDialog后,将调用onPrepareDialog(...)。 onPrepareDialog,允许您在创建对话框之后但在显示之前更改对话框。
请记住,在所有内容下,每次要显示DIALOG_CONFIRMIMPORT_ID对话框时,Android都不会为您创建新的Dialog。每次实例化一个新对话框的计算成本太高。相反,它创建一次,导致onCreatDialog被调用,然后是onPrepareDialog。每隔一次显示对话框,它只会调用onPrepareDialog。
在Android开发者网站上查看以下文章。它清楚地解释了事情。
http://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog
所以尝试使用onCreateDialog只是为了初始化在对话框放映之间不会改变的东西,然后使用onPrepareDialog方法动态更新对话框的内容(即获取新文件名)
干杯!