0

我在使用自定义适配器多次单击 ListView 时遇到问题。

我很好地捕捉到了 onClick 事件,问题是我需要在调用 web 服务的每一行点击上启动一个 AsyncTask。它是相同的 AsyncTask,只是参数不同。

如果用户快速单击多行,则仅触发最后一个 AsyncTask 并且仅更新该行。

处理 onClick() 的代码

myListView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
        {
            Item item = (Item) mylLstView.getAdapter().getItem(position);           


            //execute AsyncTask
        }
    });

我的异步任务

private class CheckItemInOrOutTask extends AsyncTask<Context, Void, Boolean>
{
    private int position;
    Item singleItem;

    public CheckItemInOrOutTask(int position, Item singleItem)
    {
        this.position = position;
        this.singleItem = singleItem;
    }

    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();           
    }

    @Override
    protected Boolean doInBackground(Context... params) 
    {
        try 
        {
            HttpClient client = HttpUtil.getHttpClient();
            String reqString = "Items?action=checkin";

            HttpPost post = HttpUtil.makePost(reqString);       

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("item_id", singleItem.getId()));

            nameValuePairs.add(new BasicNameValuePair("type_id", singleItem.getTypeId()));              

            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));               

            HttpResponse response = client.execute(post);
            int statusCode = response.getStatusLine().getStatusCode();

            if (statusCode == 200) 
            {           
                String result = HttpUtil.responseToString(response);    
                JSONObject jsonItem = new JSONObject(result);
                Item item = new Item(); 

                // parse json
                // set item properties          

                itemList.set(position,item);                    
            }               
        }
        catch (Exception e)
        {
            return false;
        }   

        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) 
    {
        super.onPostExecute(result);    

        //if (result) 
        {
            updateAdapter();                            
        }       
    }       
}

有人可以解释一下吗?

非常感谢。

4

1 回答 1

0

发现不是 AsyncTask 是罪魁祸首。这是因为我正在重用我的 HttpClient。

于 2012-12-30T17:01:18.490 回答