11

我的应用程序样机:

双击样机


问题 :

当点击button1它只是调用ActivitySecondIntent

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。


如何解决。

如果有任何解决方案,请分享。

谢谢你。

4

6 回答 6

12

正如 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()即使在您第一次执行和禁用按钮之前,也可以安排两次单击按钮执行。

于 2013-12-26T15:03:48.267 回答
9

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

于 2013-05-21T05:38:09.067 回答
6

您可以将launchMode设置ActivitySecondsingleTop

<activity android:name=".ActivitySecond"
            android:launchMode="singleTop"
            >
            ...
</activity>
于 2013-05-21T05:35:07.833 回答
3
btn.setOnclickListener(new View.onClickListener(){

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

          }
    });

您必须在 onlclick 事件中设置 setEnabled(false)。

于 2013-05-21T05:41:29.703 回答
0

当我在 Buttons 中使用可绘制的选择器并设置

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

它在双击时执行 onClick() 事件。我偶然发现它正在使用 android emulator api level 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;

          }
    }
于 2014-10-24T18:53:16.620 回答
0

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

于 2015-05-20T10:50:14.257 回答