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

相关问题