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를 처리하기 위해?
고마워요.
이 업데이트에 ProgressDialog를 사용하고 있습니까 ?? 사용자가 클릭 한 모든 행을 업데이트하려고합니까? – itsrajesh4uguys
ProgressDialog를 사용하고 있지 않습니다. 이 방법으로 앱을 사용하면 사용자가 서로 빨리 행을 클릭 할 수 있습니다. 그런 다음 모든 행을 업데이트하십시오. – AndroidCoder
'updateAdapter()'에 무엇이 있습니까? – dmon