RecyclerView OnClickListener(在整个RV上)

时间:2016-09-13 10:06:44

标签: android android-recyclerview onclicklistener

我的RecyclerView:

   <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"
               />

ClickListener:

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

但是当我点击recyclerview时,它无法正常工作。我认为clicklistener可能是由recyclerview中的项目触发的。所以我尝试的是在recyclerview Items'布局中设置clickable = false并设置布局的onClickListener(null)但它不起作用。

更新

感谢您的所有答案,我应该更好地解释,我在另一个recyclerview项目中有一个recyclerview,后者的每个项目都有一个Recyclerview。我通过将recyclelerview放在框架布局中并在recyclervjew上添加另一个布局并在该布局上设置onClickListener来修复此问题。

4 个答案:

答案 0 :(得分:1)

由于Recycler视图不支持itemClick Listener,实现一个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;
}

在Bind View Holder中

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

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

答案 1 :(得分:0)

您只需使用onBindViewHolder()方法进行简单的调用,即可能是您自己的持有人类。

因此请使用holder.itemView.setOnClickListener(new setOn....){

itemViewonCreateViewHolder方法中充气的视图。

答案 2 :(得分:0)

根据我的理解,您需要点击完整的Recycler视图, 试试这个,

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

答案 3 :(得分:-3)

    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){

}