2012-12-20 4 views
0

사용자 지정 어댑터를 사용하여 ListView에서 여러 번 클릭하면 문제가 있습니다.안드로이드 목록보기 행에서 여러 AsyncTasks 클릭

나는 모든 onClick 이벤트를 잡기 때문에, 문제는 웹 서비스를 호출하는 각 행 클릭에서 AsyncTask를 시작해야한다는 것이다. 같은 AsyncTask, 다른 매개 변수와 함께.

사용자가 여러 행을 빠르게 클릭하면 마지막 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();        
     }  
    }  
} 

누군가가 되거 수

의 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 
     } 
    }); 

내 AsyncTask를 처리하기 위해?

고마워요.

+0

이 업데이트에 ProgressDialog를 사용하고 있습니까 ?? 사용자가 클릭 한 모든 행을 업데이트하려고합니까? – itsrajesh4uguys

+0

ProgressDialog를 사용하고 있지 않습니다. 이 방법으로 앱을 사용하면 사용자가 서로 빨리 행을 클릭 할 수 있습니다. 그런 다음 모든 행을 업데이트하십시오. – AndroidCoder

+0

'updateAdapter()'에 무엇이 있습니까? – dmon

답변

0

범인 인 AsyncTask가 아니라고 알았습니다. HttpClient를 재사용했기 때문입니다.

관련 문제