如何解决Android中按钮问题的双击?

时间:2013-05-21 05:31:46

标签: android button android-activity double-click

我的应用程序的样本:

Double Tap Mockup


问题:

点击 button1 时,只需拨打 ActivitySecond 意图

button1.setOnClickListener(this);

public void onClick(View v) {
// TODO Auto-generated method stub
     switch (v.getId()) 
     {
          case R.id.button1:
                Intent intent = new Intent(getApplicationContext(), ActivitySecond.class);
                startActivity(intent);
                break;
          default:
                break;
     }
}

但是,在双击时,它会打开两次 ActivitySecond。


如何解决它。

如果有任何解决方案可以分享它。

谢谢。

6 个答案:

答案 0 :(得分:9)

Gabe Sechan伤心地说:

  

这可以通过计时器完成(获取他们点击它的时间,保存它,如果他们在100分钟内再次点击它,则忽略第二次点击)

这是我在项目中使用的实现:

public abstract class OnOneClickListener implements View.OnClickListener {
    private static final long MIN_CLICK_INTERVAL = 1000; //in millis
    private long lastClickTime = 0;

    @Override
    public final void onClick(View v) {
        long currentTime = SystemClock.elapsedRealtime();
        if (currentTime - lastClickTime > MIN_CLICK_INTERVAL) {
            lastClickTime = currentTime;
            onOneClick(v);
        }
    }

    public abstract void onOneClick(View v);
}

只需使用OnOneClickListener代替OnClickListener,然后使用onOneClick()方法执行代码。

onClick()中带有停用按钮的解决方案无效。即使在第一个onClick()执行和禁用按钮之前,也可以安排两次单击按钮。

答案 1 :(得分:8)

这称为去抖 - 它是硬件和软件中的经典问题。你可以做几个技巧,但它们都归结为暂时禁用按钮并在以后重新启用它。这可以通过计时器完成(获取他们点击它的时间,保存它,如果他们在100分钟内再次点击它,则忽略第二次点击)。另一种方法是在onClick之后禁用按钮,并在新Activity通过onActivityResult完成时重新启用它。或者还有十几种其他方式,为您挑选最简单的方法。

答案 2 :(得分:4)

您可以将ActivitySecond的launchMode设置为singleTop

<activity android:name=".ActivitySecond"
            android:launchMode="singleTop"
            >
            ...
</activity>

答案 3 :(得分:2)

btn.setOnclickListener(new View.onClickListener(){

          public void onClick(View v) {
                btn.setEnabled(false);

          }
    });

你必须在onclick事件中制作setEnabled(false)。

答案 4 :(得分:0)

当我在按钮中使用选择器drawable时 并设置

android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"

双击时执行onClick()事件。 我发现它不小心在Android模拟器api 10级,Android 2.3.3上工作 没有在真实设备上测试过。这是完整的代码。

               <Button
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:text="Discover"
                android:id="@+id/Button1"
                android:layout_weight=".5"
                android:layout_margin="0dp"
                android:background="@drawable/btn_nearby"
                android:contentDescription="gjhfjhkjhgkvkjh"
                android:drawableLeft="@drawable/ic_follow"
                android:paddingLeft="20dp"
                android:paddingRight="0dp"
                android:drawablePadding="-10dp"
                android:textSize="16sp"
                android:paddingTop="2.5dp"
                android:paddingBottom="2.5dp"
                android:clickable="true"
                android:focusable="true"
                android:focusableInTouchMode="true"/> 

和Java代码

    @Override
    public void onClick(View view) {
        switch(view.getId()) {

            case R.id.Button1:
                onButton1Click();
                break;

            case R.id.Button2:
                onButton2Click();
                break;

          }
    }

答案 5 :(得分:0)

我将为此提交第三个解决方案。我通过添加一个布尔值来解决它,该布尔值用于检查活动(按钮启动)是否已经启动。