【问题标题】:Android: onItemClick only returns first selected ItemAndroid:onItemClick 只返回第一个选择的项目
【发布时间】:2010-10-27 22:33:46
【问题描述】:

我正在使用 ArrayAdapter 来填充 ListView。选择和项目后,它会显示一个确认是/否对话框。如果用户的选择是否定的,那么他应该能够选择显示相同对话框的另一个项目。以此类推。

这是我的代码:

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”每次都显示单击的项目,但只有自 Activity 启动以来的第一个选定项目被传递给“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;
 }

非常感谢您的帮助!

【问题讨论】:

    标签: android listview dialog android-arrayadapter


    【解决方案1】:

    我猜这与 onCreateDialog 方法仅在第一次创建对话框时被调用这一事实有关。因此,当您第一次看到该对话框时,它将具有正确的文件名。

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

    请记住,Android 并不是在您每次想要显示 DIALOG_CONFIRMIMPORT_ID 对话框时都为您创建一个新对话框。每次都实例化一个新对话框的计算成本太高。相反,它会创建一次,这会导致调用 onCreatDialog,然后调用 onPrepareDialog。每次显示对话框时,它只调用 onPrepareDialog。

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

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

    所以尝试使用 onCreateDialog 来初始化在对话框显示之间不会改变的内容,然后使用 onPrepareDialog 方法动态更新对话框的内容(即获取新文件名)

    干杯!

    【讨论】:

    • 你完全正确!非常感谢您的快速答复。干杯!
    • 如果这回答了您的问题,您是否可以通过单击答案左侧的复选框轮廓来接受答案。谢谢!
    • 完成。由于某种原因,我的 Firefox 上没有显示该复选框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2020-07-20
    • 2021-06-26
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多