2

我想實現一個RecyclerView內CardView長按RecyclerView onLongClickListener拒絕觸發

佈局:

<android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:scrollbars="vertical" 
     android:longClickable="true" 
     android:hapticFeedbackEnabled="true" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

我嘗試這樣做:

mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); 
mRecyclerView.setLayoutManager(new LinearLayoutManager(Utils.context)); 
mRecyclerView.setOnLongClickListener(new AdapterView.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View view) { 
       Toast.makeText(Utils.context,"dsfd",Toast.LENGTH_LONG).show(); 
       return true; 
      } 
     }); 

而且我也試過在RecyclerView.ViewHolder類中實現此事件,但沒有任何效果。我有長時間的按壓效果,但事件本身沒有被觸發。沒有onItemLongClickListener。我也試過這個:RecyclerView onClick

我錯過了什麼?

+0

把你的聽衆放在'RecyclerView'的小部件上,而不是'RecyclerView'本身。 「我也試過這個:RecyclerView onClick。」 - 這似乎有正確的答案。 – CommonsWare 2015-04-05 11:12:31

+0

關於第一部分:你的意思是我應該爲卡片視圖內的所有小部件定義長按事件?如果用戶長時間按下小部件以外怎麼辦? – Amos 2015-04-05 11:25:14

+0

「是否應該回收再利用者的觀點?」 - 對不起。 Eng.Fouad的答案是不在'RecyclerView'上設置一個長時間的監聽器。他正在添加一個觸摸項目的偵聽器,一個用於檢測點擊和長時間點擊的偵聽器。如果你想讓整個項目可以長時間點擊,那可能是最好的方法。如果您只需要部分項目是可長期點擊的,則將偵聽器放在項目中的小部件上。 – CommonsWare 2015-04-05 11:29:00

回答

2

你可以創建接口,你應該實現onLongClicked(int position)方法。並使用它。 按照此步驟創建onLongClickListener:

創建接口:

public interface IRecyclerViewClickListener { 

    void onLongClicked(int position); 
} 

在活動/片段創建偵聽器對象,並在創建適配器方法,這個監聽器對象傳遞給您的適配器。例如:

// ... some code ... 
adapter = new MoviesListAdapter(getActivity(), list, listener); 
rvDialogs.setAdapter(adapter); 
// ... code ... 

在你擁有ViewHolder構造適配器設置長監聽器ItemView控件:

public class MyViewHolder extends RecyclerView.ViewHolder { 

     TextView Title; 
     // ... 

     public MessageViewHolder(View itemView) { 
      super(itemView); 

      Title = (TextView) itemView.findViewById(R.id.tvDialogTitle); 
      // ... 

      itemView.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        listener.onLongClicked(getAdapterPosition()); 
        return false; 
       } 
      }); 
     } 
    } 

在活動/片段設置您的IListener後:

listener = new IRecyclerViewClickListener() { 
      @Override 
      public void onLongClicked(int position) { 
       Toast.makeText(getActivity(), String.valueOf(position), Toast.LENGTH_SHORT).show(); 
      } 
     }; 

希望它能幫助您!祝你好運,對不起我的英語不好;)

+0

應該被標記爲答案。奇妙的作品。 – 2017-07-15 20:15:59

相關問題