RecyclerView的简单使用
来源:互联网 发布:合并报表连续编制知乎 编辑:程序博客网 时间:2024/06/06 19:06
今天更新的是一个RecyclerView的使用,首先它是实现了点击按钮实现的一系列功能
这是它的一个效果图,然后点击按钮可以实现相应的功能,XML不多说了,直接copy
Mainactivity.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="添加" android:textAllCaps="false" /> <Button android:id="@+id/btn_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="删除" android:textAllCaps="false" /> <Button android:id="@+id/btn_list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="List" android:textAllCaps="false" /> <Button android:id="@+id/btn_grid" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Grid" android:textAllCaps="false" /> <Button android:id="@+id/btn_flow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="flow" android:textAllCaps="false" /> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>
recycleview_item (可以按照需求定义,我用的就是一个图片加一段数字)
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:padding="5dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#22000000" android:gravity="center" android:orientation="horizontal" android:padding="5dp"> <ImageView android:id="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="3dp" android:text="Content" android:textAllCaps="false" android:textColor="#000000" /> </LinearLayout></RelativeLayout>
创建完布局之后,我们就要写相对应的逻辑代码了
那么首先我们要清楚实现RecyclerView的一些步骤,实现RecyclerView的adapter,然后要用于主类调用方法,接下来我们就先来解读RecyclerView.Adapter
下面是适配器的实现思路
1. 继承RecycleView的adapter
2. 写ViewHolder
3. 在继承RecyclerView.Adapter的类型泛型定义为这个ViewHolder4. 创建构造方法,把外界的上下文和数据传递到适配器中。
5. 通过mViewHolder获取到控件对象。
6. 在onBindViewHolder方法中进行赋值。
代码如下(含注释):
public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.mViewholder>{ //通过构造函数得到外界的上下文和数据 private final Context context; private ArrayList<String> datas; public MyRecycleViewAdapter(Context context, ArrayList<String> datas){ this.context = context; this.datas = datas; } //相当 @Override public mViewholder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = View.inflate(context,R.layout.item_recycleview,null); //创建viewholder对象 mViewholder mViewholder = new mViewholder(itemView); return mViewholder; } @Override public int getItemCount() { return datas.size(); } class mViewholder extends RecyclerView.ViewHolder{ //控件对象 private ImageView iv_icon; private TextView tv_title; public mViewholder(View itemView) { super(itemView); iv_icon = (ImageView) itemView.findViewById(R.id.iv_icon); tv_title = (TextView) itemView.findViewById(R.id.tv_title); //low点击事件 iv_icon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //获取用户点击item的位置 Toast.makeText(context,"用户点击的图片="+getLayoutPosition(),Toast.LENGTH_LONG).show(); } }); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(monItemClickListener!=null){ monItemClickListener.onItemclic(v,datas.get(getLayoutPosition())); } } }); } } interface onItemClickListener{ /** * 抽象方法,当recycleview某个被点击的时候回调 * @param view 点击的item对象 * @param data 点击时的数据 */ void onItemclic(View view,String data); } //创建接口 private onItemClickListener monItemClickListener; //设置recycleview的某个监听 public void setOnItemClickListener(onItemClickListener onItemClickListener){ monItemClickListener=onItemClickListener; } //相当于getview绑定数据不符的代码,数据和View绑定。 @Override public void onBindViewHolder(mViewholder holder, int position) { //根据item得到对应的数据 String data = datas.get(position); //通过holder对象给控件设置数据 holder.tv_title.setText(data); } //添加方法 public void addData(int i, String name) { datas.add(i,name); notifyDataSetChanged(); } //删除方法 public void removeData(int i) { datas.remove(i); //更新局部条目,预防重新加载全部布局。// notifyItemRemoved(0); //更新 notifyDataSetChanged(); }}
然后下面我们运行的是Mainactivity类,这里我们执行的是点击事件的操作
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button btn_add; private Button btn_delete; private Button btn_list; private Button btn_grid; private Button btn_flow; private RecyclerView recyclerview; private ArrayList<String> datas; private MyRecycleViewAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initdata(); //设置适配器 adapter = new MyRecycleViewAdapter(this, datas); recyclerview.setAdapter(adapter); recyclerview.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); adapter.setOnItemClickListener(new MyRecycleViewAdapter.onItemClickListener() { @Override public void onItemclic(View view, String data) { Toast.makeText(MainActivity.this,"点击了"+data+"条目",Toast.LENGTH_SHORT).show(); } }); } private void initdata() { datas = new ArrayList<>(); //准备数据集合 for (int i = 0; i < 100; i++) { datas.add("Content_" + i); } } private void initView() { btn_add = (Button) findViewById(R.id.btn_add); btn_delete = (Button) findViewById(R.id.btn_delete); btn_list = (Button) findViewById(R.id.btn_list); btn_grid = (Button) findViewById(R.id.btn_grid); btn_flow = (Button) findViewById(R.id.btn_flow); recyclerview = (RecyclerView) findViewById(R.id.recyclerview); //设置点击事件 btn_add.setOnClickListener(this); btn_delete.setOnClickListener(this); btn_list.setOnClickListener(this); btn_grid.setOnClickListener(this); btn_flow.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_add://D.添加数据 adapter.addData(0,"666666"); break; case R.id.btn_delete://D.删除数据 adapter.removeData(0); recyclerview.scrollToPosition(55); break; case R.id.btn_list://设置List类型效果 recyclerview.setLayoutManager(new GridLayoutManager(this,1,LinearLayoutManager.VERTICAL,false)); break; case R.id.btn_grid://设置Grid类型效果 recyclerview.setLayoutManager(new GridLayoutManager(this,2, GridLayoutManager.VERTICAL,false)); break; case R.id.btn_flow://设置瀑布流类型效果 break; } }}
在MainActivity中我们要用到LayoutManager的管理者对象来控制条目的排列,控制其显示的方式
有人会发现关于瀑布流的代码还没有
这里本人会在下一篇更新,敬请关注
阅读全文
1 0
- RecyclerView的简单使用
- RecyclerView 的简单使用
- recyclerview的简单使用
- Recyclerview的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView的简单使用
- RecyclerView 的简单使用
- Recyclerview的简单使用
- RecyclerView的简单使用
- mb_detect_encoding
- oracle导入dmp文件
- Java内存分配之堆、栈和常量池
- Android设计原则
- Python3爬虫之突破天涯防盗链
- RecyclerView的简单使用
- MongoDB学习笔记
- android studio使用Bmob来实现登录注册的功能
- SQL学习笔记
- database中的函数及查询方法
- windows安装anaconda 报错failed to create anacoda menu ?
- 通过js为html动态创建表格
- TCP之Nagle算法&&延迟ACK
- MAC OS 伪分布式Apache Hadoop及HBase Hive Zookeeper Flume Mahout Spark2 配置