再次单击Listview项时,AlertDialog中断

时间:2017-11-14 13:56:51

标签: android listview android-asynctask alertdialog

我想在listview上显示newwork服务器的信息。当我点击某个项目时,它会再次搜索网络,返回一些数据,在对话框中显示它们。我使用了两个AsyncTasks来实现它。但是,当我单击该项目两次(单击该项目一次没问题)时,它就会崩溃。我调试并发现它第二次甚至没有进入itemclicklistener方法。无法修复错误...非常感谢任何帮助。    以下是代码的一部分。首先是onitemclicklistener

private class lvVoteItemOnItemClickListener implements AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                long arg3) {
            HashMap<String, String> map = (HashMap<String, String>) lvVoteItem.getItemAtPosition(arg2);
            if (clickID != Integer.parseInt(map.get("id"))) {
                clickID = Integer.parseInt(map.get("id"));
                new VoteAccountTask().execute(map.get("id"));
            } else {
                new AlertDialog.Builder(VoteSummaryActivity.this).setTitle(res)
                        .setIcon(null)
                        .setView(null)
                        .show();
                String temp = "";
            }

        }
    }

其次,show对话框AsyncTask

public class VoteAccountTask extends AsyncTask<String, Void, String> {

    protected String doInBackground(String... param) {
            return searchVoteAccountWebservice(Integer.parseInt(param[0]));
    }

    @Override
    protected void onPostExecute(String result) {
        //votedetail.itemID + signal + votedetail.vID + signal + votedetail.itemName + signal + votedetail.ifUserDefine + signal + votedetail.creater +signal + votedetail.createDate
        super.onPostExecute(result);
        res = setStringsByWebString(result, VoteSummaryActivity.this.getString(R.string.datasetserStr1), VoteSummaryActivity.this.getString(R.string.datasetserStr2));
        new AlertDialog.Builder(VoteSummaryActivity.this).setTitle(res)
                .setIcon(null)
                .setView(null)
                .show();
    }
}

1 个答案:

答案 0 :(得分:0)

只需执行Asynctask即可,无需检查以前的执行情况。不阻止UI。因此,每次单击时,按钮,textView或任何可点击的按钮都会触发asynctask。

我会在同样的情况下应用两种方法;

  1. Show Progress Dialog
  2. 在preExecute方法中设置项目clickable = false,然后在postExecute
  3. 处设置为true