0

在將此問題標記爲重複之前,請注意,我已經在Stackoverflow上查看了類似問題的所有解決方案,但它們都無效。如何在recyclerview中單擊項目時停止手勢檢測器在單擊時執行長按?

下面是我實現手勢檢測器的過程。您將在擴展GestureDetector.SimpleOnGestureListener的私有類中看到,我只創建了長按的代碼,但onLongPress中包含的代碼也會在一次點擊中觸發。

類實現OnItemTouchListsner 見下文

public class MyFragment extends Fragment implements RecyclerView.OnItemTouchListener 

代碼創建私有變量見下文代碼

private GestureDetectorCompat gestureDetector; 

我分配gestureDetector在onCreateView 見下文

代碼

我實施OnItemTouchListener 所需的方法見下文

@Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
      gestureDetector.onTouchEvent(e); 
      return false; 
     } 

    @Override 
    public void onTouchEvent(RecyclerView rv, MotionEvent e) { 

    } 

我創建了一個私有類手勢聽者代碼見下面的代碼

private class RecyclerViewOnGestureListener extends GestureDetector.SimpleOnGestureListener { 

      @Override 
      public void onLongPress(MotionEvent e) { 
       //code in here executes on single tap, but should only execute on long press 
       super.onLongPress(e); 
      } 
     } 

回答

0

試圖重寫RecyclerView#requestDisallowInterceptTouchEvent並取消其有。

+0

謝謝你的幫助。我修好了:)這是一個很好的建議,但沒有解決問題。看到我的答案... – HaloMediaz 2015-03-31 21:23:38

0

是什麼原因造成的問題

我用RecyclerItemClickListener (see link to github page)也正因爲如此,我可以不需要片段內要執行長按中使用longpress,作爲代碼。

所以我有我的片段工具OnItemTouchListener和設置recyclerview.addOnItemTouchListener(this)。我只在我的片段中包含了長按的代碼。我還設置了recyclerview.addOnItemTouchListenerRecyclerItemClickListener

什麼引起問題:設置onItemTouchListener for recyclerview兩次。

解決方案:使RecyclerItemClickListener成爲內部類。

相關問題