Android 再次单击Listview的项目时,AlertDialog已断开

Android 再次单击Listview的项目时,AlertDialog已断开,android,listview,android-asynctask,android-alertdialog,Android,Listview,Android Asynctask,Android Alertdialog,我想在listview上显示newwork服务器的信息。当我单击某个项目时,它将再次搜索网络,返回一些数据,并在对话框中显示它们。我使用了两个异步任务来实现它。但是,当我两次单击该项目时(单击该项目一次就可以了),它就坏了。我调试后发现,第二次它甚至没有进入itemclicklistener方法。无法修复错误。。。非常感谢您的帮助。 下面是部分代码。首先,我是一个听者 private class lvVoteItemOnItemClickListener implements AdapterVi

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

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 = "";
            }

        }
    }
私有类lvVoteItemOnItemClickListener实现AdapterView.OnItemClickListener{
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
HashMap=(HashMap)lvVoteItem.getItemAtPosition(arg2);
if(clickID!=Integer.parseInt(map.get(“id”)){
clickID=Integer.parseInt(map.get(“id”));
新建VoteAccountTask().execute(map.get(“id”);
}否则{
新建AlertDialog.Builder(VoteSummaryActivity.this).setTitle(res)
.setIcon(空)
.setView(空)
.show();
字符串temp=“”;
}
}
}
第二,显示对话框异步任务

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();
    }
}
公共类VoteAccountTask扩展了AsyncTask{
受保护的字符串doInBackground(字符串…参数){
返回searchVoteAccountWebservice(Integer.parseInt(参数[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
//votedetail.itemID+signal+votedetail.vID+signal+votedetail.itemName+signal+votedetail.ifUserDefine+signal+votedetail.creater+signal+votedetail.createDate
super.onPostExecute(结果);
res=setStringsByWebString(结果,VoteSummaryActivity.this.getString(R.string.datasetserStr1),VoteSummaryActivity.this.getString(R.string.datasetserStr2));
新建AlertDialog.Builder(VoteSummaryActivity.this).setTitle(res)
.setIcon(空)
.setView(空)
.show();
}
}

只需执行异步任务,无需检查以前的执行情况。不阻止用户界面。因此,您的按钮、文本视图或任何可单击的内容都可以在每次单击时触发异步任务

在同样的情况下,我会采用两种方法

  • 在preExecute方法中将项clickable设置为false,然后在postExecute方法中将其设置为true

  • Serhat Türkman,谢谢你的帮助。我试过你的建议。将项目clickable设置为false。但问题依然存在。我无法在几秒钟内单击该项目。单击第一次弹出对话框的时间,即刚退出活动的秒数。Asynctask的onPostExecute将弹出AlertDialog,但发现它无法再次弹出对话框。我还是找不到原因。把你的日志放进去