Android RecyclerView的使用(四)——点击事件
来源:互联网 发布:网络在线肝病咨询 编辑:程序博客网 时间:2024/06/08 16:10
Android RecyclerView的使用(四)——点击事件
前言: RecyclerView提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现绚丽的效果。
- 通过布局管理器LayoutManager,可以控制其显示的方式;
- 通过ItemDecoration,可以控制Item间的间隔(可定制);
- 通过ItemAnimator,可以控制Item增删的动画;
- 至于点击、长按事件,RecyclerView并没有给我们提供相应的方法接口,需要我们自己实现。
上一节我们了解了如何通过RecyclerView 实现瀑布流,本节我们将学习如何为我们的Item添加点击事件。
效果图:
1、布局文件
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"/></android.support.constraint.ConstraintLayout>
2、定义item的样式
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="@drawable/item_bg" android:layout_margin="3dp" android:layout_height="72dp"> <ImageView android:id="@+id/imageView" android:layout_margin="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/textView" android:layout_gravity="center_vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
3、自定义的Adapter适配器,添加item click接口,设置item的点击事件。
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private LayoutInflater mInflater; private Context mContext; private List<String> mDatas; private int[] imgIds; private OnItemClickListener mOnItemClickListener; public MyAdapter(Context context, List<String> datas, int[] imgIds) { this.mContext = context; this.mDatas = datas; this.imgIds = imgIds; mInflater = LayoutInflater.from(context); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(R.layout.item_single_textview, parent, false); MyViewHolder viewHolder = new MyViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { holder.textView.setText(mDatas.get(position)); holder.imageView.setBackgroundResource(imgIds[ position % imgIds.length]); // item click if (mOnItemClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mOnItemClickListener.onItemClick(holder.itemView, position); } }); } // item long click holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { mOnItemClickListener.onItemLongClick(holder.itemView, position); return true; } }); } @Override public int getItemCount() { return mDatas.size(); } public void setOnItemClickListener(OnItemClickListener listener) { this.mOnItemClickListener = listener; } public void addData(int pos) { mDatas.add(pos, "Add one"); notifyItemInserted(pos); } public void deleteData(int pos) { mDatas.remove(pos); notifyItemRemoved(pos); } public interface OnItemClickListener { void onItemClick(View view, int position); void onItemLongClick(View view, int position); }}class MyViewHolder extends RecyclerView.ViewHolder { ImageView imageView; TextView textView; public MyViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); imageView = itemView.findViewById(R.id.imageView); }}
4、MainActivity.java
public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private List<String> mDatas; private int[] imgIds; private MyAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initDatas(); recyclerView = (RecyclerView) findViewById(R.id.recyclerView); mAdapter = new MyAdapter(this, mDatas, imgIds); recyclerView.setAdapter(mAdapter); //设置RecyclerView的布局管理 LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(manager); recyclerView.setItemAnimator(new DefaultItemAnimator()); mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(MainActivity.this, "clicked " + position, Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(View view, int position) { Toast.makeText(MainActivity.this, "long clicked " + position, Toast.LENGTH_SHORT).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.add: mAdapter.addData(1); break; case R.id.delete: mAdapter.deleteData(1); break; case R.id.listView: recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this)); break; case R.id.gridView: recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this, 2)); break; case R.id.gridView_hor: recyclerView.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.HORIZONTAL)); break; case R.id.staggered: Intent intent = new Intent(this, StaggeredActivity.class); startActivity(intent); break; default: break; } return super.onOptionsItemSelected(item); } private void initDatas() { imgIds = new int[]{R.mipmap.pic01, R.mipmap.pic02, R.mipmap.pic03, R.mipmap.pic04, R.mipmap.pic05, R.mipmap.pic06, R.mipmap.pic07}; mDatas = new ArrayList<>(); mDatas.add("亳州"); mDatas.add("大娃"); mDatas.add("二娃"); mDatas.add("三娃"); mDatas.add("四娃"); mDatas.add("五娃"); mDatas.add("六娃"); mDatas.add("七娃"); mDatas.add("喜羊羊"); mDatas.add("美羊羊"); mDatas.add("懒羊羊"); mDatas.add("沸羊羊"); mDatas.add("暖羊羊"); mDatas.add("慢羊羊"); mDatas.add("灰太狼"); mDatas.add("红太狼"); mDatas.add("孙悟空"); mDatas.add("黑猫警长"); mDatas.add("舒克"); mDatas.add("贝塔"); mDatas.add("海尔"); mDatas.add("阿凡提"); mDatas.add("邋遢大王"); mDatas.add("哪吒"); mDatas.add("没头脑"); mDatas.add("不高兴"); mDatas.add("蓝皮鼠"); mDatas.add("大脸猫"); mDatas.add("大头儿子"); mDatas.add("小头爸爸"); mDatas.add("蓝猫"); mDatas.add("淘气"); mDatas.add("叶峰"); mDatas.add("楚天歌"); mDatas.add("江流儿"); mDatas.add("Tom"); mDatas.add("Jerry"); mDatas.add("12345"); mDatas.add("54321"); mDatas.add("_(:з」∠)_"); mDatas.add("……%¥#¥%#"); }}
阅读全文
0 0
- Android RecyclerView的使用(四)——点击事件
- android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理
- RecyclerView的使用(三)——点击事件
- RecyclerView的使用(包含点击事件)
- Android RecyclerView 的点击事件
- Android RecyclerView的使用与添加点击事件
- Android 解析RecyclerView(1)——带点击事件监听的通用Adapter
- Android RecyclerView使用(二) -给Item添加点击事件
- RecyclerView——点击事件
- Android中RecyclerView使用,RecyclerView-Item点击事件设置
- Android中RecyclerView简单的点击事件(不推荐)
- 【Android】RecyclerView的OnItemClickListener点击事件处理
- RecyclerView的使用(二)点击事件
- RecyclerView的使用 以及RecyclerView的自定义点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- web前端快速解决网页跨域问题
- CSS常用属性
- 开启一个新线程,优化接口返回速度
- eclipse sts反编译插件
- JSR 303数据校验
- Android RecyclerView的使用(四)——点击事件
- leetcode 437. Path Sum III(路径和)(DFS)
- 字符编码 ASCII Unicode UTF-8
- 启动mysql
- 《Microsoft Power BI数据可视化与数据分析》之前言
- Algorithm之路二十:Valid Parentheses
- 浅谈Java中的hashcode方法
- xLog日志文件写入改成24小时制
- Linux永久关闭防火墙