RecyclerView添加Item的监听

RecyclerView添加Item的监听

 

1.按正常做法写完RecyclerViewadapter

 

 

2.adapter类中添加2个接口

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

public interface MyItemLongClickListener {
    public void onItemLongClick(View view, int position);
}

 

 

3.adapterViewHolder类的构造器形参列表里加入这2个变量,并接收作为成员变量,为itemView设置点击或长按事件的监听。

 

class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {

    private TextView tv_item_recycler_view;

    private MyItemClickListener mClickListener;
    private MyItemLongClickListener mLongClickListener;

    public MyHolder(View itemView, MyItemClickListener clickListener, MyItemLongClickListener longClickListener) {
        super(itemView);

        tv_item_recycler_view = (TextView) itemView.findViewById(R.id.tv_item_recycler_view);

        mClickListener = clickListener;
        mLongClickListener = longClickListener;

        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (mClickListener != null) {
            mClickListener.onItemClick(v, getPosition());
        }
    }

    @Override
    public boolean onLongClick(View v) {
        if (mLongClickListener != null) {
            mLongClickListener.onItemLongClick(v, getPosition());
        }

        return true;
    }
}

 

 

4.这时,onCreateViewHolder()方法中肯定要报错,因为newMyHolder的实参列表中少了2个参数。在adapter类中添加2个接口的对象(这里不能叫对象)作为成员变量,放到MyHolder的参数列表中,并为它们设置set方法

private MyItemClickListener mItemClickListener;
private MyItemLongClickListener mItemLongClickListener;

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(mContext).inflate

(R.layout.item_recycler_view, parent, false);

    return new MyHolder(view,mItemClickListener,

mItemLongClickListener);
}

public void setOnItemClickListener(MyItemClickListener clickListener){
    this.mItemClickListener = clickListener;
}

public void setOnItemLongClickListener(MyItemLongClickListener longClickListener){
    this.mItemLongClickListener = longClickListener;
}

 

 

5.在Activity类中设置LayoutManageradapter后就可以用adapter的对象调用方法为RecyclerView的Item设置监听了

 

private void initView() {
    recycler_view_main = (RecyclerView)findViewById

(R.id.recycler_view_main);
}

 

 

private void initData() {
    for (int i = 0; i < 50; i++) {
        datas.add("今日阳光明媚" + i);
    }

    recycler_view_main.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));

    RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(this,datas);
    recycler_view_main.setAdapter(recyclerViewAdapter);

    recyclerViewAdapter.setOnItemClickListener(this);
    recyclerViewAdapter.setOnItemLongClickListener(this);
}

 

 

6.需要Activity类实现RecyclerViewAdapterMyItemClickListenerMyItemLongClickListener2接口并实现对应2抽象方法

 

@Override
public void onItemClick(View view, int position) {
    Toast.makeText(MainActivity.this, "单击---position==" + position, Toast.LENGTH_SHORT).show();
}

@Override
public void onItemLongClick(View view, int position) {
    Toast.makeText(MainActivity.this, "长按------position==" + position, Toast.LENGTH_SHORT).show();
}

 

实现的方法里就可以写我们自己的逻辑了,我在这里只做了吐司。

 

 

 

快速添加头部

 

例如有如下布局

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|top"
/>

    <com.bartoszlipinski.recyclerviewheader2.RecyclerViewHeader
        android:id="@+id/rvh_main_header"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_gravity="center_horizontal|top"
>

        <ImageView
            android:id="@+id/iv_main_header"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:src="@drawable/ic_launcher"
/>

    </com.bartoszlipinski.recyclerviewheader2.RecyclerViewHeader>

</FrameLayout>

 

如果ImageView添加成RecyclerView的头布局它是不会跟着RecyclerView一起滑动的。若添加成头布局,我们要先集成一个第三方框架RecyclerViewHeader

 

这个框架中有library和一个sample先一起集成我们的项目中,需要调一下build.gradle文件:

def cfg = rootProject.ext.configuration

def libs = rootProject.ext.libraries

 

apply from: '../gradle-mvn-push.gradle'

上边这些都注释掉

 

android {

    compileSdkVersion cfg.compileVersion

    buildToolsVersion cfg.buildToolsVersion

 

    defaultConfig {

        minSdkVersion cfg.minSdk

        targetSdkVersion cfg.targetSdk

        versionCode cfg.versionCode

        versionName cfg.versionName

}

这些换成下边的要和自己项目的版本统一

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    
defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    
}

 

这些也要替换成自己的版本

dependencies {

    compile fileTree(dir: 'libs', include: ['*.jar'])

    provided "com.android.support:recyclerview-v7:${libs.support}"

}

 

如下

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    provided "com.android.support:recyclerview-v7:23.4.0"
}

 

完之后把library改个名字,把sample干掉就可以了,我们只需要库。将library关联到自己的项目中,就可以把RecyclerViewHeader控件包裹到要添加成头布局的控件外边了

<com.bartoszlipinski.recyclerviewheader2.RecyclerViewHeader
    android:id="@+id/rvh_main_header"

android:layout_width="match_parent"

android:layout_height="80dp"

android:layout_gravity="center_horizontal|top">

 

    <ImageView
        android:id="@+id/iv_main_header"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_centerInParent="true"

    android:src="@drawable/ic_launcher" />

 

</com.bartoszlipinski.recyclerviewheader2.RecyclerViewHeader>

 

的布局最好用FramLayout

初始化控件后,头布局控件调用attachTo()方法

rvh_main_header.attachTo(recycler_view_main);

 

注意RecyclerViewHeader必须在RecyclerView设置了LayoutManager之后调用。

目前该库适用于LinearLayoutManager,GridLayoutManager和StaggeredGridLayoutManager布局的RecyclerViews。

只支持垂直布局LayoutManager

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值