Как решить проблему двойного нажатия на кнопку в android?
Макет моего приложения:
Задача:
При нажатии на button1 он просто вызовет Intent of 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 ответов:
Вы можете установить launchMode из
ActivitySecond
вsingleTop
<activity android:name=".ActivitySecond" android:launchMode="singleTop" > ... </activity>
Как Гейб Сечан сад:
Это можно сделать с помощью таймера (получить время, когда они нажимают на него, сохранить его, и если они нажимают его снова в течение, скажем, 100 мс игнорировать 2-й щелчок)
Вот реализация, которую я использовал в своем проекте:
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()
завещания. выполнить и отключить кнопку.
Это называется разборкой-это классическая проблема в аппаратном и программном обеспечении. Есть пара трюков, которые вы можете сделать, но все они сводятся к временному отключению кнопки и повторному включению ее позже. Это можно сделать с помощью таймера (получить время, когда они нажимают на него, сохранить его, и если они нажимают его снова в течение, скажем, 100 мс игнорировать 2-й щелчок). Другой способ-отключить кнопку после onClick и повторно включить ее, когда новое действие завершится через onActivityResult. Или их там дюжина. другие способы, выбрать самый простой для вас.
btn.setOnclickListener(new View.onClickListener(){ public void onClick(View v) { btn.setEnabled(false); } });
Вы должны сделать setEnabled (false)в событии onlclick.
Когда я использую selector drawable in 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; } }