【问题标题】:RecyclerView OnClickListener (On entire RV)RecyclerView OnClickListener(在整个 RV 上)
【发布时间】:2017-01-20 21:31:58
【问题描述】:

我的回收站视图:

   <android.support.v7.widget.RecyclerView
                android:background="?android:selectableItemBackground"
                app:layoutManager="android.support.v7.widget.LinearLayoutManager"
                android:id="@+id/crash_course_item_dates"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:clickable="true"
               />

点击监听器:

  holder.crashCoursesDateRecyclerView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                crashCourseListener.onCrashCourseClick(crashCourse);
            }
        });

但是,当我单击回收站视图时它不起作用。我认为可能是 clicklistener 被 recyclerview 中的项目触发。所以我尝试的是在 recyclerview 项目的布局中设置 clickable=false 并设置布局的 onClickListener(null) 但它不起作用。

更新

感谢您的所有回答,我应该更好地解释,我在另一个 recyclerview 项目中有一个 recyclerview,后者的每个项目里面都有一个 recyclerview。我通过将 recyclerview 置于框架布局中并在 recyclervjew 的“顶部”添加另一个布局并在该布局上设置 onClickListener 来解决此问题。

【问题讨论】:

  • 只需在您创建自定义持有者类的适配器类中调用 OnClickListener

标签: android android-recyclerview onclicklistener


【解决方案1】:

由于recycler视图不支持itemClick监听器,实现一个simplelistener接口并在bindview中调用该接口并将其传递给主类。请在下面找到这段代码

public interface OnItemClickListener {
    public void onItemClick(View view, int position);
}

适配器构造函数

    public ContentAdapter(List<ContentItem> items, OnItemClickListener listener) {
    this.items = items;
    this.listener = listener;
}

在绑定视图中

holder.setOnClickListener(new View.OnClickListener() {
    @Override public void onClick(View v) {
        listener.onItemClick(item);
    }
});

使用 OnItemClickListener 实现您的活动,并在回调中添加您所需的代码。

【讨论】:

    【解决方案2】:

    您只需简单地调用您的 onBindViewHolder() 方法,您可能拥有自己的持有者类。

    所以使用holder.itemView.setOnClickListener(new setOn....){

    itemView 是在 onCreateViewHolder 方法中膨胀的视图。

    【讨论】:

      【解决方案3】:

      据我了解,您希望单击完整的 Recycler 视图, 试试这个,

        RecyclerView rv = (RecyclerView) findViewById(R.id.recycler_view);
          rv.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                //your action  
              }
          });
      

      【讨论】:

        【解决方案4】:
            first of all your question is not clear to me but still what i have understood u want you perform click listener on the each item of the try this
        

        在您的 recyclerview 的项目布局中

            <LinearLayout
                    android:id="@+id/linearlayout"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical"
                   ><TextView
                    android:id="@+id/linearlayout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Demo"
                    android:clickable="false"
                   />
        
                </LinearLayout>
        
        Now in item ItemHolder class
        
        public class Demo extends ItemHolder {
        LinearLayout ll;
        

        公开演示(查看视图){

        ll=(LinearLayout)view.findViewById(R.id.linearlayout);
        ll.setOnClickListener(View View){
        
        }
        

        【讨论】:

        • 请使用正确的格式详细说明您的答案。
        猜你喜欢
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多