在开发Android应用程序时,人们经常想防止用户无意中单击同一按钮两次。否则,可能会启动两个相等的活动/片段(或其他一些东西运行两次)。
对于此问题,存在多种解决方案。例如:维护“最后点击的时间戳记”,禁用视图,为按钮创建子类...
但是,这些解决方案都不是好的。 要么用样板代码使活动变得混乱,要么它只针对一种视图。
我寻求一种满足以下要求的通用解决方案:
(R1)防止双击可能需要最多增加一行代码。
(R2)防止双击应适用于许多不同类型的视图(例如Button,MaterialButton等)。
编辑: 我发现基于活动的解决方案太混乱了。 因此,我为onClick和onItemClick写了一个基于侦听器的解决方案:https://github.com/fkirc/throttle-click-listener
答案 0 :(得分:1)
尝试一下
public class MainActivity extends AppCompatActivity {
private long PressedTime;
private long Timeout = 500; // Change it to any value you want
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (PressedTime + Timeout > System.currentTimeMillis()) return;
PressedTime = System.currentTimeMillis();
// do stuff
}
});
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (PressedTime + Timeout > System.currentTimeMillis()) return;
PressedTime = System.currentTimeMillis();
// do stuff
}
});
// .......
}
}