RecyclerView的使用
来源:互联网 发布:python正则表达式匹配 编辑:程序博客网 时间:2024/05/21 01:32
简单使用
1.添加依赖
compile 'com.android.support:design:24.2.0'
2.Activity布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.konfyt.myapplication.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/mRecyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /></RelativeLayout>
3.Item布局
<?xml version="1.0" encoding="utf-8"?><!-- 注意:RecyclerView 的 LinearLayoutManager, item的最外层布局参数是有效的 --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="20dp" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/item_textView" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textSize="25sp"/></LinearLayout>
4.创建Model 作为RecyclerView的数据源
public class MyModel { private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}
5.RecyclerView的适配器
/** * 创建Adapter继承RecyclerView.Adapter<VH> * 需要一个ViewHolder作为泛型 * 此ViewHolder需要继承RecyclerView.ViewHolder */public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{ private List<MyModel> data; private LayoutInflater inflater; public MyAdapter(List<MyModel> data, Context context) { this.data = data; inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } // 获取数据源的个数 @Override public int getItemCount() { return data==null?0:data.size(); } /** * 创建ViewHolder * @param parent itemView的父控件 * @param viewType 用来加载不同的布局(多布局) * @return */ @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = inflater.inflate(R.layout.item,parent,false); //public ViewHolder(View itemView) return new ViewHolder(itemView); } // 加载数据 @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(data.get(position).getMsg()); } static class ViewHolder extends RecyclerView.ViewHolder{ TextView mTextView; public ViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.item_textView); } }}
6.绑定适配器
public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { mRecyclerView = (RecyclerView) findViewById(R.id.mRecyclerView); // RecyclerView 需要使用布局管理器 mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); List<MyModel> data = getData(); MyAdapter adapter = new MyAdapter(data,this); mRecyclerView.setAdapter(adapter); } private List<MyModel> getData() { List<MyModel> data = new ArrayList<>(); for (int i = 0; i < 10; i++) { MyModel myModel = new MyModel(); myModel.setMsg("item"+i); data.add(myModel); } return data; }}
7.效果
进阶 - 点击事件
方式一:(在adapter里操作)
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = inflater.inflate(R.layout.item,parent,false); // 方式一:填充itemView的时候,为itemView设置点击事件 // 当前MyAdapter实现View.OnClickListener itemView.setOnClickListener(this); // public ViewHolder(View itemView) return new ViewHolder(itemView); }
// 重写点击事件@Override public void onClick(View view) { // onClick(View view) 此时的view 就是点击的itemView // public int getChildAdapterPosition(@Nullable android.view.View child) // 此方法可以返回 这个itemView 的 position int position = mRecyclerView.getChildAdapterPosition(view); Snackbar.make(view,data.get(position).getMsg(),Snackbar.LENGTH_LONG).show(); }
// RecyclerView绑定适配器的时候 会把recyclerView作为参数传递过来 @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); mRecyclerView = recyclerView; }
方式二:接口回调
// 1.定义接口(模拟ListView的OnItemClickListener)public interface OnItemClickListener{ void onItemClick(int position);}
// 2.声明OnItemClickListener接口的引用,并提供setter方法private OnItemClickListener listener;// 提供setter方法public void setListener(OnItemClickListener listener) { this.listener = listener;}
// 3. 填充itemView的时候,为itemView设置view的点击事件@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = inflater.inflate(R.layout.item,parent,false); // 当前MyAdapter实现View.OnClickListener itemView.setOnClickListener(this); return new ViewHolder(itemView);}
// 4.重写view的onClick()方法@Overridepublic void onClick(View view) { int position = mRecyclerView.getChildAdapterPosition(view); if (listener != null) { // 将点击事件转移给外面的调用者 listener.onItemClick(position); }}
// 5.在Activity进行具体实现// 当前activity实现OnItemClickListener接口adapter.setListener(this);@Overridepublic void onItemClick(int position) { Toast.makeText(this,"当前点击的位置是:"+position,Toast.LENGTH_LONG).show();}
源码下载
0 0
- RecyclerView+RecyclerView.Adapter+RecyclerView.ViewHolder的使用
- RecyclerView的使用
- RecyclerView的使用
- RecyclerView 的使用详解
- RecyclerView的基本使用
- RecyclerView的使用
- Android -- RecyclerView的使用
- RecyclerView的使用
- CardView,RecyclerView的使用
- 关于RecyclerView的使用
- RecyclerView的使用
- RecyclerView的使用(一)
- PopupWindow + RecyclerView的使用
- RecyclerView的简单使用
- RecyclerView 的简单使用
- recyclerview的使用
- RecyclerView的使用记录
- Android RecyclerView的使用
- kafka实践(四):kafka使用之中的一些关注点
- go语言数组
- 基于tensorflow的MNIST手写数字识别
- Google示例APP,教你实现Tab+ViewPaper,教你实现Drawer导航
- iOS点击链接跳转到App Store上的应用内
- RecyclerView的使用
- 带你玩转Visual Studio——调用约定与(动态)库
- 第十一章 ICMP:Internet控制报文协议
- sql查询语句
- 【十】DOM(一)
- java实现归并排序
- 餐馆(动态规划)
- 标准贴片电阻电容的焊接方法
- js中的动画效果