如何在android中的活动开始时禁用按钮的单击事件检查

Posted

技术标签:

【中文标题】如何在android中的活动开始时禁用按钮的单击事件检查【英文标题】:How to disable click events checking of button at the starting of activity in android 【发布时间】:2016-04-28 16:11:32 【问题描述】:

我正在创建一个带有文本和按钮的列表视图,该列表视图中的数据是从异步任务中填充的,在这里我正在使用类似 的对话框中显示该列表视图。我的问题是当用户选择列表视图中存在的“微调器”值并且在对话框弹出时,我在微调器的onItemclick 中编写的异步任务正在执行,像这样连续显示

。请帮我解决这个问题,很抱歉提出这样的问题。这是我的适配器代码,用于执行单击取消按钮

leaves_type.setOnItemSelectedListener(new OnItemSelectedListener() 

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) 

        //  leaves_type_string = leaves_type.getSelectedItem().toString();
            new update_leave_entry_breakup_values().execute("UpdateValues",
                    "1082", id_string, leaves_type.getSelectedItem().toString(), username, "",
                    "", "", "", "", "", "");

        

        @Override
        public void onNothingSelected(AdapterView<?> parent) 

        
    );

这是我的异步任务:

  class update_leave_entry_breakup_values extends
            AsyncTask<String, integer, String> 

        @Override
        protected void onPreExecute() 
            // TODO Auto-generated method stub
            super.onPreExecute();

            progressdialog_view.setMessage("Updating leaves...");
            progressdialog_view.show();

        

        @Override
        protected String doInBackground(String... params) 
            // TODO Auto-generated method stub
            String TempMethod = params[0];
            String Flag = params[1];
            String value1 = params[2];
            String value2 = params[3];
            String value3 = params[4];
            String value4 = params[5];
            String value5 = params[6];
            String value6 = params[7];
            String value7 = params[8];
            String value8 = params[9];
            String value9 = params[10];
            String value10 = params[11];

            try 
                SoapObject request = new SoapObject(NAME_SPACE, TempMethod);
                request.addProperty("Flag", Flag);
                request.addProperty("value1", value1);
                request.addProperty("value2", value2);
                request.addProperty("value3", value3);
                request.addProperty("value4", value4);
                request.addProperty("value5", value5);
                request.addProperty("value6", value6);
                request.addProperty("value7", value7);
                request.addProperty("value8", value8);
                request.addProperty("value9", value9);
                request.addProperty("value10", value10);

                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
                envelope.dotNet = true;
                envelope.setOutputSoapObject(request);
                HttpTransportSE android_HttpTransport = new HttpTransportSE(URL);
                Android_HttpTransport.debug = true;
                Android_HttpTransport.call(NAME_SPACE + TempMethod, envelope);
                String responseXml = envelope.getResponse().toString();
                return responseXml;
             catch (Exception ex) 
                ex.printStackTrace();
            

            return null;
        

        @Override
        protected void onPostExecute(String result) 
            // TODO Auto-generated method stub
             super.onPostExecute(result);

            progressdialog_view.dismiss();

            if (result == null) 
                Toast.makeText(context, "Error while reading data",
                        Toast.LENGTH_SHORT).show();
             else if (result.equals("0")) 
                Toast.makeText(context, "Error while Updating data",
                        Toast.LENGTH_SHORT).show();
             else 
                Toast.makeText(context, "Update Success",
                        Toast.LENGTH_SHORT).show();

            
        
    

【问题讨论】:

progressdialog.setCancelable(true); progressdialog.setCanceledOnTouchOutside(true); 你已经尝试了progressdialog.setCancelable(true);就像@IntelliJAmiya 评论一样,然后没有得到解决方案,所以你必须描述更多关于你的问题 感谢您的快速回复..它不工作老兄,它不是进度对话框的问题我想是这样..:(@IntelliJAmiya 我编辑了我的问题@RaviVGHL 【参考方案1】:

从您的点击事件中删除notifyDataSetChanged();


final Button cancel = (Button) row.findViewById(R.id.btn_cancel);
        cancel.setTag(position);
        cancel.setOnClickListener(new View.OnClickListener() 

            @Override
            public void onClick(View v) 

                int tag_position = (Integer) v.getTag();
                objects.remove(tag_position);
                notifyDataSetChanged(); // remove this
                new cancel_leave_entry_breakup_values().execute("UpdateValues", "1083",
                        leave_app.getID(), leave_app.getUsername().toString(),
                        "", "", "", "", "", "", "", "");

            
        );

据我说,您调用了您的适配器两次。你需要调用一次。

当你想像OnRestart()方法一样刷新listview的数据时使用notifyDataSetChanged();

【讨论】:

但是我在这里写适配器我们如何在侧适配器@Amit Vaghela 中写重启方法 不,这是一个使用 notifyDataSetChanged() 的例子;我是说你两次调用 asynctask 。只调用一次, new cancel_leave_entry_breakup_values().execute("UpdateValues", "1083", leave_app.getID(), leave_app.getUsername().toString(), "", "", "", "", " ", "", "", ""); 我只在这里打过一次电话,你能清楚地告诉我@Amit Vaghela 移除 notifyDataSetChanged();从 onclick 并尝试@lakshman 是的,伙计,它的工作..谢谢,但我需要调用它,因为当用户单击按钮 @Amit Vaghela 时我需要刷新该列表

以上是关于如何在android中的活动开始时禁用按钮的单击事件检查的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮时如何将文本视图从一件事切换到另一件事 - Android

Android:单击片段中的按钮时如何通知活动? [复制]

单击时禁用按钮

如何禁用活动中的主页按钮单击 - 就像在锁屏应用程序中一样?

如何在按钮单击时启动新活动

android中的下一个活动出错[重复]