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