2013-05-21 36 views
8

Mockup của ứng dụng của tôi:Làm cách nào để giải quyết việc nhấn đúp vào Vấn đề nút trong Android?

Double Tap Mockup


Vấn đề:

Khi nhấp chuột vào button1 nó chỉ cần gọi Ý định của 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; 
    } 
} 

Nhưng, khi nhấn đúp, mở hai lần Hoạt độngSecond.


CÁCH GIẢI QUYẾT CNTT.

XIN VUI LÒNG NẾU BẤT K SOL GIẢI PHÁP ĐÃ CHIA SẺ NÓ.

Cảm ơn bạn.

+2

đồng bộ hóa onClick và tắt nút của bạn bằng 'setEnabled (false)' trên lần nhấp đầu tiên và 'setEnabled (true)' onResume –

+0

Câu trả lời đã được đăng ở đây [ngăn chặn nhấn đúp vào nút android] (https: // stackoverflow .com/questions/11290610/how-to-prevent-double-code-running-by-clicking-hai lần-nhanh-tới-một-nút-trong-android/45917595 # 45917595) –

Trả lời

3

Bạn có thể đặt launchMode của ActivitySecond để singleTop

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

Cảm ơn bạn. Tôi giải quyết nó bằng mã của bạn. :) – Darshak

+4

Không phải giải pháp tốt nhất IMO, vì nó dẫn đến trải nghiệm người dùng kém. Hoạt động thứ hai vẫn bắt đầu hai lần (được người dùng chú ý trừ khi hoạt ảnh bị vô hiệu hóa và tối ưu hóa về mặt tiêu thụ tài nguyên). Ngoài ra, việc đặt cờ này có thể gây rối với điều hướng. –

7

này được gọi là debouncing- một vấn đề cổ điển của nó trong phần cứng và phần mềm. Có một vài thủ thuật bạn có thể làm, nhưng tất cả chúng đều sôi xuống để tắt nút tạm thời và bật lại sau. Điều này có thể được thực hiện thông qua bộ đếm thời gian (có được thời gian họ nhấp vào nó, lưu nó, và nếu họ nhấp vào nó một lần nữa trong vòng nói 100ms bỏ qua nhấp chuột thứ 2). Một cách khác là vô hiệu hóa nút sau onClick và kích hoạt lại nó khi Activity mới kết thúc thông qua onActivityResult. Hoặc có hàng tá cách khác, chọn cách dễ nhất cho bạn.

2
btn.setOnclickListener(new View.onClickListener(){ 

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

      } 
    }); 

bạn phải đặt setEnabled (false) trong sự kiện onclick.

+0

Tôi không muốn đặt bật/tắt, quá trình dài của nó đối với tôi vì tôi có hơn 200 bố cục trong ứng dụng của mình. Mã của bạn cũng đúng. – Darshak

+0

có, cảm ơn bạn đã trả lời. – Darshak

8

Như Gabe Sechan buồn:

này có thể được thực hiện thông qua bộ đếm thời gian (có được thời gian họ click vào nó, lưu nó, và nếu họ nhấp vào nó một lần nữa trong vòng nói 100ms bỏ qua các nhấp chuột 2)

đây là một thực hiện mà tôi sử dụng trong dự án của tôi:

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

Chỉ cần sử dụng OnOneClickListener thay vì OnClickListener và thực hiện yo mã ur trong phương thức onOneClick().

Giải pháp có nút tắt trong onClick() sẽ không hoạt động. Hai lần nhấp vào một nút có thể được lập lịch để thực thi ngay cả trước khi onClick() đầu tiên của bạn thực thi và vô hiệu hóa nút.

+0

bạn có thể vui lòng giải quyết truy vấn tương tự của tôi .. tôi đang cố gắng để nâng cao một bánh mì nướng khi nút nguồn được nhấn hai lần –

0

Khi tôi sử dụng drawable selector trong Buttons và thiết lập

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

nó thực hiện các sự kiện onClick() Nhấn đúp. Tôi thấy nó vô tình làm việc trên cấp độ giả lập api android 10, Android 2.3.3 Không được thử nghiệm trên thiết bị thực. Đây là mã hoàn chỉnh.

   <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"/> 

Và Mã Java

@Override 
    public void onClick(View view) { 
     switch(view.getId()) { 

      case R.id.Button1: 
       onButton1Click(); 
       break; 

      case R.id.Button2: 
       onButton2Click(); 
       break; 

      } 
    } 
0

tôi sẽ chỉ cần đưa ra một giải pháp thứ ba cho việc này. Tôi giải quyết nó bằng cách thêm một boolean được sử dụng để kiểm tra xem hoạt động (mà nút bắt đầu) đã được bắt đầu hay chưa.

Các vấn đề liên quan