Android: onItemClick возвращает только первый выбранный элемент - PullRequest
1 голос
/ 28 октября 2010

Я использую 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);
       }
    });

Странно то, что хотя «Тост» каждый раз показывает выбранный элемент, только первый выбранный элемент с момента запуска действияпередается в "SelectedFile".Независимо от того, сколько раз вы щелкаете по другому элементу, «SelectedFile» всегда принимает одно и то же значение, значение первого нажатого элемента, за пределами этого кода.

Большое спасибо за любую помощь!

1 Ответ

1 голос
/ 28 октября 2010

Я предполагаю, что это как-то связано с тем, что метод onCreateDialog вызывается только при первом создании диалога.Поэтому, когда вы в первый раз увидите диалог, у него будет правильное имя файла.

После вызова onCreateDialog вызывается onPrepareDialog (...).onPrepareDialog, позволяет изменить диалоговое окно после того, как оно было создано, но до его отображения.

Помните, что под всем, Android не создает новый диалог для вас каждый раз, когда вы хотите показать диалог DIALOG_CONFIRMIMPORT_ID,Слишком вычислительно дорого каждый раз создавать новый диалог.Вместо этого он создает его один раз, в результате чего вызывается onCreatDialog, а затем onPrepareDialog.Каждый раз, когда отображается это диалоговое окно, оно вызывает только «RepareDialog».

Ознакомьтесь со следующей статьей на сайте разработчика Android.Это объясняет все довольно четко.

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

Так что попробуйте использовать onCreateDialog только для инициализации материала, который не будет меняться между отображениями диалогового окна, затем используйте метод onPrepareDialog для динамического обновлениясодержимое диалога (т.е. получение нового имени файла)

Cheers!

...