2010-10-27 65 views
1

我正在使用和ArrayAdapter来填充ListView。选择和项目后,它会显示一个确认Y/N对话框。如果用户的选择是否定的,那么他应该能够选择显示相同对话的另一项目。等等。Android:onItemClick只返回第一个选择的项目

这里是我的代码:

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); 
     } 
    }); 

奇怪的是,虽然“吐司”显示单击项目每一次,只有第一个选择项,因为启动该活动被传递给“SelectedFile”。无论您点击不同的项目多少次,“SelectedFile”总是采用相同的值,即此代码之外的第一个点击项目的值。

继承人是我的对话框代码:

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; 
} 

非常感谢您的帮助!

回答

1

我猜这与onCreateDialog方法仅在第一次创建对话框时有关。所以当你第一次看到对话框时,它会有正确的文件名。

调用onCreateDialog后,调用onPrepareDialog(...)。 onPrepareDialog,允许您在创建对话框之后,但在显示对话框之前更改该对话框。

请记住,在所有情况下,每次您想要显示DIALOG_CONFIRMIMPORT_ID对话框时,Android都不会为您创建新的对话框。每次实例化新对话的计算量过大。相反,它会创建一次,这会导致onCreatDialog被调用,然后是onPrepareDialog。每隔一次显示对话框,它只会调用onPrepareDialog。

看看Android开发者网站上的以下文章。它很清楚地解释事情。

http://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog

因此尝试使用onCreateDialog只是东西初始化不会对话框的看房之间切换,然后用onPrepareDialog方法动态更新对话框的内容(即获得新的文件名)

干杯!

+0

你完全正确!非常感谢您的快速回答。干杯! – 2010-10-27 22:57:01

+0

如果这回答了您的问题,您是否可以通过单击答案左侧的复选框大纲来接受答案。谢谢! – plainjimbo 2010-10-27 22:59:02

+0

完成。由于某种原因,复选框未显示在我的Firefox上。 – 2010-10-27 23:25:20

相关问题