RecyclerView条目的点击事件,接口回调

第一个,MyOnItemClickListener.java,响应 RecyclerView item的点击事件:

import android.view.View;
/**
 * item点击接口
 */
public interface MyOnItemClickListener {
    void OnItemClickListener(View view, int position);
}
第二个,MyOnItemLongClickListener.java,响应 RecyclerView item的长按事件:
import android.view.View;
/**
 * item长按接口
 */
public interface MyOnItemLongClickListener {
    void OnItemLongClickListener(View view, int position);
}
然后在MyRecyclerViewAdapter里面声明这两个接口,定义两个方法,用来让adapter在Activity里面回调,并在onBindViewHolder中给item设置监听:

定义的方法:

    /**
     * 列表点击事件
     *
     * @param itemClickListener
     */
    public void setOnItemClickListener(MyOnItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    /**
     * 列表长按事件
     *
     * @param itemLongClickListener
     */
    public void setOnItemLongClickListener(MyOnItemLongClickListener itemLongClickListener) {
        this.itemLongClickListener = itemLongClickListener;
    }
onBindViewHolder中:

        /*自定义item的点击事件不为null,设置监听事件*/
        if (itemClickListener != null) {
            myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    itemClickListener.OnItemClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());
                }
            });
        }

        /*自定义item的长按事件不为null,设置监听事件*/
        if (itemLongClickListener != null) {

            myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    itemLongClickListener.OnItemLongClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());
                    return true;
                }
            });

        }
最后在Activity里面调用setOnItemClickListener和setOnItemLongClickListener就可以了。

下面看完整代码: 
MyRecyclerViewAdapter.java

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

/**
 * Created by jia on 2015/10/16.
 */
class MyRecyclerViewAdapter extends RecyclerView.Adapter {

    private Context context;
    private List<String> list;
    private MyOnItemClickListener itemClickListener;
    private MyOnItemLongClickListener itemLongClickListener;

    public MyRecyclerViewAdapter(Context context, List<String> list) {
        this.context = context;
        this.list = list;
    }

    /**
     * onCreateViewHolder中负责为Item创建视图
     *
     * @param viewGroup
     * @param i
     * @return
     */
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        /*初始化填充RecyclerView的item*/
        View viewItem = LayoutInflater.from(context).inflate(R.layout.list_item, viewGroup, false);
        /*返回自定义的ViewHolder*/
        MyViewHolder myViewHolder = new MyViewHolder(viewItem);
        return myViewHolder;
    }

    /**
     * onBindViewHolder负责将数据绑定到Item的视图上。
     *
     * @param viewHolder
     * @param position
     */
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

        /*将接收到的ViewHolder强转成自定义的VIewHolder*/
        final MyViewHolder myViewHolder = (MyViewHolder) viewHolder;
        /*为Item设置数据*/
        myViewHolder.getIdView().setText(list.get(position));
        myViewHolder.getNameView().setText("name");

        /*自定义item的点击事件不为null,设置监听事件*/
        if (itemClickListener != null) {
            myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    itemClickListener.OnItemClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());
                }
            });
        }

        /*自定义item的长按事件不为null,设置监听事件*/
        if (itemLongClickListener != null) {

            myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    itemLongClickListener.OnItemLongClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());
                    return true;
                }
            });
        }
    }

    /**
     * 本方法决定了绘制item的数量
     *
     * @return
     */
    @Override
    public int getItemCount() {
        return list.size();
    }

    /**
     * 列表点击事件
     *
     * @param itemClickListener
     */
    public void setOnItemClickListener(MyOnItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    /**
     * 列表长按事件
     *
     * @param itemLongClickListener
     */
    public void setOnItemLongClickListener(MyOnItemLongClickListener itemLongClickListener) {
        this.itemLongClickListener = itemLongClickListener;
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        private TextView idView;
        private TextView nameView;

        public MyViewHolder(View itemView) {
            super(itemView);
            idView = (TextView) itemView.findViewById(R.id.id);
            nameView = (TextView) itemView.findViewById(R.id.name);
        }

        public TextView getIdView() {
            return idView;
        }

        public TextView getNameView() {
            return nameView;
        }
    }
}
MainActivity.java
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends ActionBarActivity {

    private RecyclerView recyclerView;
    private MyRecyclerViewAdapter adapter;
    private List<String> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

        initData();
        /*
         * 初始化一个布局管理器,这里是默认的竖直线性,效果如上图所示
         * 其实完整写法为:
         * LinearLayoutManager manager = new LinearLayoutManager(context, orientation, reverseLayout);
         * 其中三个参数分别表示:
         * 1.context:上下文
         * 2.orientation:布局方向;
         *      LinearLayoutManager.VERTICAL:竖直方向(默认)
         *      LinearLayoutManager.HORIZONTAL:水平方向
         * 3.reverseLayout:布局数据是否反向;false:正常(默认);true:反向;
         * 下边的写法就相当于:new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
         */
        LinearLayoutManager manager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(manager);

        adapter = new MyRecyclerViewAdapter(MainActivity.this, list);
        recyclerView.setAdapter(adapter);
        /*点击事件*/
        adapter.setOnItemClickListener(new MyOnItemClickListener() {
            @Override
            public void OnItemClickListener(View view, int position) {
                Toast.makeText(getApplicationContext(), "position" + position + "被点击", Toast.LENGTH_SHORT).show();
            }
        });
        /*长按事件*/
        adapter.setOnItemLongClickListener(new MyOnItemLongClickListener() {
            @Override
            public void OnItemLongClickListener(View view, int position) {
                /*长按删除*/
                list.remove(position);
                adapter.notifyItemRemoved(position);
            }
        });
    }

    /**
     * 初始化集合,添加数据
     */
    private void initData() {
        list = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            list.add("id:" + i);
        }
    }

}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
简洁版
1.定义一个接口
public interface MyOnItemClickListener {    void OnItemClickListener(View view, int position);}

2.适配器中添加:
private MyOnItemClickListener itemClickListener ;
public void setOnItemClickListener(MyOnItemClickListener itemClickListener) {
    this . itemClickListener = itemClickListener;
}

3.适配器 onBindViewHolder中添加:
if ( itemClickListener != null ) {
    holder. itemView .setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            itemClickListener .OnItemClickListener( holder . itemView , holder .getLayoutPosition());
        }
    });
}
HomeAdapter2. this .setOnItemClickListener( new MyOnItemClickListener() {
    @Override
    public void OnItemClickListener(View view, int position) {
        Toast. makeText ( context , "er" ,Toast. LENGTH_LONG ).show();
    }
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值