2016-06-09 3 views
0

Двойной прослушиватель не работает во фрагменте. Во-первых, я написал и реализовал примерный проект, который отлично работает в образце проекта. В примере проекта есть только одно действие. Но когда я пытаюсь интегрировать этот образец кода в свой проект, он не работает нормально. Мой реальный проект имеет активность, которая загружает фрагмент на нем. Моим требованием является то, что я дважды нажимаю любое место на этом фрагменте (загруженном на активность). Я хочу, чтобы с ним была некоторая функциональность. Проблема заключается в двойном нажатии, не работает. Вот код, который я использую для Добейся этого.Двойной прослушиватель не работает во фрагментах

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // If user is not logged in 
    if (new SessionHelper(this).getCurrentUser() <= 0) 
     startActivity(new Intent(this, LoginScreen.class)); 
    else { 
     mFragmentActivity = this; 

     // Broadcast receiver initialized here 
     mWifiStateReceiver = new WifiStateReceiver(mFragmentActivity); 

     setContentView(R.layout.activity_fragment); 
     initialize(); 
     setSupportActionBar(toolbar); 
     if (getSupportActionBar() != null) 
      getSupportActionBar().setDisplayShowTitleEnabled(false); 
     setClickListerns(); 

     gestureDetector = new GestureDetector(this, this); 

     gestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() { 
      @Override 
      public boolean onSingleTapConfirmed(MotionEvent e) { 
       LogHelper.debugLog("single tap"); 
       return false; 
      } 

      @Override 
      public boolean onDoubleTap(MotionEvent e) { 

       LogHelper.debugLog("doubletap"); 
       return false; 
      } 

      @Override 
      public boolean onDoubleTapEvent(MotionEvent e) { 
       return false; 
      } 
     }); 

     // Check if redirected via push notification 
     if (getIntent().getExtras() != null && getIntent().getExtras().getBoolean("Notification", false)) 
      replaceFragemtn(new StatementOfAccount(), false); 
     else 
      replaceFragemtn(new HomeFragment(), false); 

    } 
} 

Я реализую GestureDetector.OnGestureListener в моей деятельности как этот

public class FragmentActivity extends BaseClass 
     implements View.OnClickListener, GestureDetector.OnGestureListener {} 

и я переопределение onTouchEvent() метод как этот

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    return gestureDetector.onTouchEvent(event); 
} 

Я не могу чтобы понять эту вещь из того, что мне не хватает. Попытка решить это в течение длительного времени, но не luc к. Любая помощь пожалуйста.

ответ

0

Вам действительно нужно использовать GestureDetector?
С этим вариантом вы согласны?

public static abstract class DoubleClickListener implements View.OnClickListener { 

    private static final long DOUBLE_CLICK_TIME_DELTA = 300; 

    private long lastClickTime = 0; 

    @Override 
    public void onClick(View v) { 
     long clickTime = System.currentTimeMillis(); 
     if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA) { 
      onDoubleClick(v); 
     } else { 
      onSingleClick(v); 
     } 
     lastClickTime = clickTime; 
    } 

    public abstract void onSingleClick(View v); 

    public abstract void onDoubleClick(View v); 
} 
+0

Я хочу, чтобы весь экран использовался в качестве двойного прослушивателя. Где я должен реализовать? Макет кадра, который загружает фрагмент. Должен ли я передать это на кликлайнер? –

+0

Да, вы должны написать что-то вроде этого: rootLayout.setOnClickListener (новый DoubleClickListener() {....}); –

+0

Все еще не работает :( –

Смежные вопросы