实现RecyclerView的监听
2016-07-14 21:40
471 查看
RecyclerView要想事项响应时间,需要自定义监听器
实现RecyclerView响应事件分四步:
1.声明一个接口,定义相应事件方法
需要创建一个接口类,定义点击事件的回调
详细代码示例:
接口
实现RecyclerView响应事件分四步:
1.声明一个接口,定义相应事件方法
需要创建一个接口类,定义点击事件的回调
public interface OnRVitemClickListener { // 定义点击事件的回调 void onItemClick(int pos); }
**2.在RecyclerView的Adapter内来维护(声明)一个接口对象**
// 声明一个监听器对象 private OnRVitemClickListener onRVitemClickListener; // 提供一个方法 public void setOnRVitemClickListener(OnRVitemClickListener onRVitemClickListener){ this.onRVitemClickListener = onRVitemClickListener; }
**3.在OnBindViewHolder方法中对item设置点击事件监听,并将事件传递给接口对象**
holder.itemView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { // 获取点击的位置 int pos = holder.getLayoutPosition(); // 传递点击位置 onRVitemClickListener.onItemClick(pos); } });
4.在mainActivity中实现接口,并重写方法,实现内容
@Override public void onItemClick(int pos) { Log.e("位置信息",pos+""); }
详细代码示例:
public class MainActivity extends AppCompatActivity implements OnRVitemClickListener {
// recycleView使用步骤
// 1.添加依赖,file--project structure--app---dependencies
// 2.在布局文件中添加一个recycleview
// 3.创建一个布局文件,用于给每一个Item布局
// 4.声明属性,并与布局文件中的控件进行绑定
// 5.设置一个布局管理器
// 声明recyclerview对象
private RecyclerView recyclerView;
// 声明一个数据集合
private List<Map<String,Object>> mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recycleview);
// 5. 设置一个布局管理器
// 线性布局管理器
// recyclerView.setLayoutManager(new LinearLayoutManager(this));
// 表格布局管理器
// recyclerView.setLayoutManager(new GridLayoutManager(this,2));
// 瀑布流布局管理器
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
// 9.产生数据,在适配器代码前面
createData();
// 6.创建适配器
MyAdapter adapter = new MyAdapter();
// 8.绑定适配器
recyclerView.setAdapter(adapter);
// 给Adapter添加监听器
adapter.setOnRVitemClickListener(this);
}
private void createData(){
int[] a = {R.drawable.d1,R.drawable.d2,R.drawable.d3,R.drawable.d4,R.drawable.d5,R.drawable.d6,R.drawable.d7,R.drawable.d8,R.drawable.d9,R.drawable.d10,R.drawable.d11,R.drawable.d12,R.drawable.d13,R.drawable.d14,R.drawable.d15,R.drawable.d16,R.drawable.c17,R.drawable.d18,R.drawable.c19,R.drawable.c20};
mList = new ArrayList<>();
for (int i =0;i<20;i++){
Map map = new HashMap();
map.put("image",a[i]);
// map.put("text","乌贼"+i);
mList.add(map);
}
}
@Override
public void onItemClick(int pos) {
Log.e("位置信息",pos+"");
}
// 6.创建适配器
class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
// 声明一个监听器对象 private OnRVitemClickListener onRVitemClickListener; // 提供一个方法 public void setOnRVitemClickListener(OnRVitemClickListener onRVitemClickListener){ this.onRVitemClickListener = onRVitemClickListener; }
// 当需要拿到viewholder的时候就会调用,返回值与之前给的泛型相同,在加载不同类型的布局的时候,
// 可以根据ViewType来创建不同的ViewHolder
// ViewType是Item的布局类型
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// 这里拿到布局文件
// View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item,null);
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.simplelayout,null);
// 根据布局文件创建一个ViewHolder
MyViewHolder viewholder = new MyViewHolder(view);
return viewholder;
}
// 当内容和布局进行绑定的时候,回调这个方法
// 每当有新数据进入屏幕的时候,也会回调这个方法
// 参数holder和ViewHolder类型与泛型所规定的类型相同,参数position代表的是该item的位置
// 可以通过position来获取对应的数据
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
// 从数据列表中获取到数据
// String text = mList.get(position).get("text").toString();
int img = (int) mList.get(position).get("image");
// 将数据设置到界面上
// holder.textview.setText(text);
holder.imageView.setImageResource(img);
holder.itemView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { // 获取点击的位置 int pos = holder.getLayoutPosition(); // 传递点击位置 onRVitemClickListener.onItemClick(pos); } });
}
// 返回数据的个数
@Override
public int getItemCount() {
return mList.size();
}
// 7.创建ViewHolder
class MyViewHolder extends RecyclerView.ViewHolder{
// TextView textview;
ImageView imageView;
public MyViewHolder(View itemView) {
super(itemView);
// 进行控件关联
// textview = (TextView) itemView.findViewById(R.id.textview);
imageView = (ImageView) itemView.findViewById(R.id.imageview2);
}
}
}
}
接口
public interface OnRVitemClickListener { // 定义点击事件的回调 void onItemClick(int pos); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories