防止双击的简便方法?

时间:2019-06-02 16:21:25

标签: android android-layout android-view double-click

在开发Android应用程序时,人们经常想防止用户无意中单击同一按钮两次。否则,可能会启动两个相等的活动/片段(或其他一些东西运行两次)。

对于此问题,存在多种解决方案。例如:维护“最后点击的时间戳记”,禁用视图,为按钮创建子类...

但是,这些解决方案都不是好的。 要么用样板代码使活动变得混乱,要么它只针对一种视图。

我寻求一种满足以下要求的通用解决方案:

  • (R1)防止双击可能需要最多增加一行代码。

  • (R2)防止双击应适用于许多不同类型的视图(例如Button,MaterialButton等)。

编辑: 我发现基于活动的解决方案太混乱了。 因此,我为onClick和onItemClick写了一个基于侦听器的解决方案:https://github.com/fkirc/throttle-click-listener

1 个答案:

答案 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
            }
        });


        // .......

    }
}