我的应用程序的样本:
问题:
点击 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。
如何解决它。
如果有任何解决方案可以分享它。
谢谢。
答案 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)
我将为此提交第三个解决方案。我通过添加一个布尔值来解决它,该布尔值用于检查活动(按钮启动)是否已经启动。