Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 短时间禁用按钮以避免双击_Java_Android - Fatal编程技术网

Java 短时间禁用按钮以避免双击

Java 短时间禁用按钮以避免双击,java,android,Java,Android,我用下面的代码来拍照 captureBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mCamera.takePicture(null, null, mPicture); } }); 问题是,有时

我用下面的代码来拍照

 captureBtn.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {

                mCamera.takePicture(null, null, mPicture);
            }
        });
问题是,有时如果用户立即按下按钮两次,它就会崩溃,并出现以下错误

j


如何防止用户在安卓系统中立即双击按钮?

您可以在
onClick()
中禁用按钮,然后在图片保存后的某个位置或您打算对其执行的任何操作时再次设置您的
clickListener

我考虑过这一点

 captureBtn.setOnClickListener(new View.OnClickListener() 
            {
                @Override
                public void onClick(View v) 
                {
                    captureBtn.setEnabled(false);
                    mCamera.takePicture(null, null, mPicture);
                    captureBtn.setEnabled(true);
                }
            });

单击后禁用按钮怎么样?在
onClick()
方法完成之前,再次启用按钮。似乎
takePicture
是异步的。你需要在单击时禁用它,然后在回调中重新启用它。@Leviathan我该怎么做?你能给我举个例子吗?我的意思是禁用然后调用这个函数,然后禁用3行代码就行了?@MuhammadUmar,按钮去抖动的一般模式是使用状态变量,例如
if(!mClicking){mClicking=true;mCamera.takePicture…}
不要忘了在其中一个回调中重置变量。啊,我看到mPicture本身就是一个监听器,明白了,我在mPicture监听器上设置了enable:)这不会有帮助,因为在
onClick()
中,按钮会被禁用并立即启用,所以这样做不是很安全。
 captureBtn.setOnClickListener(new View.OnClickListener() 
            {
                @Override
                public void onClick(View v) 
                {
                    captureBtn.setEnabled(false);
                    mCamera.takePicture(null, null, mPicture);
                    captureBtn.setEnabled(true);
                }
            });