如何解决在Android的button问题的双击?

我的应用程序的样机:

双击大模型


问题:

当点击button1时 ,只需调用ActivitySecond的 Intent

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。


如何解决它。

请任何解决scheme,然后共享。

谢谢。

Solutions Collecting From Web of "如何解决在Android的button问题的双击?"

您可以将ActivitySecondsingleTop设置为singleTop

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

正如Gabe Sechan伤心:

这可以通过计时器来完成(得到他们点击它的时间,保存它,如果他们再次点击它在100ms内忽略第二次点击)

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

 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()带有禁用button的解决scheme将不起作用。 即使在您的第一个onClick()将执行并禁用button之前,也可以安排两次点击button。

这就是所谓的debouncing–它是硬件和软件中的经典问题。 有几个技巧你可以做,但他们都归结为暂时禁用button,并在以后重新启用它。 这可以通过计时器来完成(得到他们点击它的时间,保存它,如果他们再次点击它在100毫秒内忽略第二次点击)。 另一种方法是在onClick之后禁用button,当新的Activity通过onActivityResult完成时重新启用它。 或者有其他十几种方法,select最简单的方法。

 btn.setOnclickListener(new View.onClickListener(){ public void onClick(View v) { btn.setEnabled(false); } }); 

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

当我使用select器绘制在button和设置

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

它会双击执行onClick()事件。 我发现它意外的工作在Android模拟器API级别10,Android 2.3.3没有在真实设备上testing过。 这是完整的代码。

  <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; } } 

我只是提交第三个解决scheme。 我通过添加一个布尔值来解决它,这个布尔值用于检查活动(button开始)是否已经启动。