如何从ListView中提取所选项?

时间:2011-09-22 07:18:09

标签: java android listview textview android-asynctask

我有一个只能选择一个项目的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类。我的目标是在onPostExecute()的Title()方法中获取所选项(或TextView中与所选项关联的文本)。

    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 个答案:

答案 0 :(得分:1)

您可以使用position侦听器的onItemClick参数从数据源中获取单击的项目,然后将此数据传递给AsyncTask对象,并在那里使用它(在Alert中显示它)盒)

答案 1 :(得分:1)

如果您的任务是在您的活动范围内定义的,则可以使用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);

答案 2 :(得分:0)

如果AsynTask在您的活动内部,那么您可以访问listview成员并获取所选项目。呼叫

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

您可以通过参数将对象传递给AsyncTask。 将标题字符串传递给Size构造函数。喜欢这个

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

答案 3 :(得分:0)

如果您只想创建一个警告对话框,则不需要AsyncTask .. 只需在onListItemClick中添加代码getSelectedItem并从中创建一个警告..