カスタムアダプタを使用した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
}
});
私の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();
}
}
}
誰かがそれに光を当てることができますか?
どうもありがとう。