Как извлечь выбранный элемент из ListView? - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть ListView, который может выбрать только один элемент.Когда этот элемент получает щелчки, он запускает AsyncTask.В onPostExecute () появляется диалоговое окно AlertBox.Но я пытаюсь сделать так, чтобы выбранный элемент отображался внутри alertBox, и я перепробовал все, что мог придумать.Любая помощь будет оценена, и спасибо заранее.

Вот мои настройки ListView.

    Public class MyClass extends Activity
    {
    list.setAdapter(new ArrayAdapter<String>(this, R.layout.vacation_tracks, vacation_menu));

    list.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {

            for(int i = 0; i<vacation_menu.length; i++)
            {

                if(((TextView) view).getText().equals(vacation_menu[i]))
                {

                    Sizes work = new Sizes();
                    work.execute(tempLink);
            } 
        }
    }); 
   }

И это мой класс AsyncTask.Моя цель - получить выбранный элемент (или текст из TextView, связанный с выбранным элементом) в методе Title () в onPostExecute ().

    Private Class Sizes extends AsyncTask<URL, Void, Float>
    {
        protected float doInBackground(URL...urls)
        {
             //gets url.getContentLength();
        }

        protected void onPostExecute(Float result)
        {
            AlertDialog.Builder alertbox = new AlertDialog.Builder(Vacation.this);
            alertbox.setMessage( Title( ITEM FROM LISTVIEW     ) );
            alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface arg0, int arg1) 
                {

                }
            });
            alertbox.setNegativeButton("No", new DialogInterface.OnClickListener()
            {
                public void onClick(DialogInterface arg0, int arg1)
                {

                }
            });
            alertbox.show();

    } 


}

Еще раз спасибо за любую помощь!

Ответы [ 4 ]

1 голос
/ 22 сентября 2011

Если ваша Задача определена в рамках вашей Деятельности, вы можете использовать ключевое слово final:

final String alertBoxTitle = vacation_menu[i];
Sizes work = new Sizes();
work.execute(tempLink);

и

alertbox.setMessage(alertBoxTitle);

Если ваша Задача не находится в пределахОбъем вашей деятельности вы можете передать заголовок в качестве аргумента или через сеттер.В вашем случае сеттер кажется проще.

Внутри вашей задачи:

String title;

public void setTitle(String title) {
  this.title = title;
}

protected void onPostExecute(Float result) {
  AlertDialog.Builder alertbox = new AlertDialog.Builder(Vacation.this);
  alertbox.setMessage(title);
  // ...
}

Используйте это так:

Sizes work = new Sizes();
work.setTitle(vacation_menu[i]);
work.execute(tempLink);
1 голос
/ 22 сентября 2011

Вы можете использовать аргумент position вашего прослушивателя onItemClick, чтобы извлечь выбранный элемент из вашего источника данных, затем передать эти данные объекту AsyncTask и использовать их там (отобразить в поле «Предупреждение»)

0 голосов
/ 22 сентября 2011

Если вы просто хотите создать диалоговое окно оповещения, вам не нужен AsyncTask. Просто добавьте код getSelectedItem в ваш onListItemClick и создайте оповещение из этого ..

0 голосов
/ 22 сентября 2011

Если AsynTask является внутренним для вашей деятельности, то вы можете получить доступ к члену listview и получить выбранный элемент. Позвоните

mListView.getSelectedItem(); // returns the object associated with this item.

или

Вы можете передать объект в AsyncTask через параметры. Передайте строку заголовка конструктору Size. Как это

Sizes work = new Sizes(mListView.getSelectedItem().getTitle());
work.execute(tempLink); 
...