RecyclerView的基本操作集成

来源:互联网 发布:高瓴资本红杉资本知乎 编辑:程序博客网 时间:2024/06/10 15:32
这篇文章主要来给大家实现一下基础的RecyclerView的集成:
整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。
  • 你想要控制其显示的方式,请通过布局管理器LayoutManager
  • 你想要控制Item间的间隔(可绘制),请通过ItemDecoration
  • 你想要控制Item增删的动画,请通过ItemAnimator
  • 你想要控制点击、长按事件,请自己写!
为了使用RecyclerView控件,我们需要创建一个Adapter和一个LayoutManager:
Adapter:集成自RecyclerView.Adapetr类,主要用来将数据和布局item进行绑定。

先看下结果:


准备工作导入依赖就可以了:
compile 'com.android.support:mediarouter-v7:25.0.0'
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'

接下来就上代码:

MainActivity:
[html] view plain copy
  1. package com.eightgroup.rikao1013;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.support.v7.widget.DividerItemDecoration;  
  6. import android.support.v7.widget.GridLayoutManager;  
  7. import android.support.v7.widget.LinearLayoutManager;  
  8. import android.support.v7.widget.RecyclerView;  
  9. import android.support.v7.widget.StaggeredGridLayoutManager;  
  10. import android.view.LayoutInflater;  
  11. import android.view.View;  
  12. import android.view.ViewGroup;  
  13. import android.widget.Button;  
  14. import android.widget.TextView;  
  15. import android.widget.Toast;  
  16.   
  17. import java.util.ArrayList;  
  18. import java.util.List;  
  19.   
  20. import butterknife.BindView;  
  21. import butterknife.ButterKnife;  
  22. import butterknife.OnClick;  
  23.   
  24. public class MainActivity extends AppCompatActivity {  
  25.     // butterknife 工具  
  26.     @BindView(R.id.id_action_add)  
  27.     Button idActionAdd;  
  28.     @BindView(R.id.id_action_delete)  
  29.     Button idActionDelete;  
  30.     @BindView(R.id.id_action_list)  
  31.     Button idActionList;  
  32.     @BindView(R.id.id_action_group)  
  33.     Button idActionGroup;  
  34.     @BindView(R.id.id_action_pubu)  
  35.     Button idActionPubu;  
  36.     private RecyclerView mRecyclerView;  
  37.     private static List<String> mDatas;  
  38.     HomeAdapter mAdapter;  
  39.     public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;  

  40.     @Override  
  41.     protected void onCreate(Bundle savedInstanceState) {  
  42.         super.onCreate(savedInstanceState);  
  43.         setContentView(R.layout.activity_main);  
  44.         ButterKnife.bind(this);  
  45.   
  46.         initData();  
  47.         mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);  
  48.           
  49.         // 三种样式可以自己选择:  
  50. //      listview样式  
  51. //      mRecyclerView.setLayoutManager(new LinearLayoutManager(this));  
  52.         mRecyclerView.setAdapter(mAdapter = new HomeAdapter());  
  53.         mRecyclerView.addItemDecoration(new DividerItemDecoration(this,  
  54.                 DividerItemDecoration.VERTICAL));  
  55.         // GridLayoutManager  样式  
  56.         mRecyclerView.setLayoutManager(new GridLayoutManager(this, 4));  
  57.         // 瀑布流  
  58. //        mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));  
  59.         // 配置适配器  
  60.         mAdapter.setOnItemClickLitener(new OnItemClickLitener()  
  61.         {  
  62.             @Override  
  63.             public void onItemClick(View view, int position)  
  64.             {  
  65.                 Toast.makeText(MainActivity.this, position + " click",  
  66.                         Toast.LENGTH_SHORT).show();  
  67.                 mAdapter.addData(position);  
  68.             }  
  69.   
  70.             @Override  
  71.             public void onItemLongClick(View view, int position)  
  72.             {  
  73.                 Toast.makeText(MainActivity.this, position + " long click",  
  74.                         Toast.LENGTH_SHORT).show();  
  75.                 mAdapter.removeData(position);  
  76.             }  
  77.         });  
  78.     }  
  79.     // 添加数据  
  80.     protected void initData() {  
  81.         mDatas = new ArrayList<String>();  
  82.         for (int i = 'A'; i < 'z'; i++) {  
  83.             mDatas.add("" + (char) i);  
  84.         }  
  85.     }  
  86.     // 顶部的5个按钮的点击事件  
  87.     @OnClick({R.id.id_action_add, R.id.id_action_delete, R.id.id_action_group, R.id.id_action_list, R.id.id_action_pubu})  
  88.     public void onViewClicked(View view) {  
  89.         switch (view.getId()) {  
  90.             // 添加  
  91.             case R.id.id_action_add:  
  92.                 mAdapter.addData(1);  
  93.                 break;  
  94.             // 删除  
  95.             case R.id.id_action_delete:  
  96.                 mAdapter.removeData(1);  
  97.                 break;  
  98.             case R.id.id_action_list:  
  99.                 mRecyclerView.setAdapter(mAdapter = new HomeAdapter());  
  100.                 mRecyclerView.addItemDecoration(new DividerItemDecoration(this,  
  101.                         DividerItemDecoration.VERTICAL));  
  102.                 mRecyclerView.setLayoutManager(new LinearLayoutManager(this));  
  103.                 break;  
  104.             case R.id.id_action_group:  
  105.                 mRecyclerView.setAdapter(mAdapter = new HomeAdapter());  
  106.                 mRecyclerView.addItemDecoration(new DividerItemDecoration(this,  
  107.                         DividerItemDecoration.VERTICAL));  
  108.                 // GridLayoutManager  
  109.                 mRecyclerView.setLayoutManager(new GridLayoutManager(this, 4));  
  110.                 break;  
  111.             case R.id.id_action_pubu:  
  112.                 mRecyclerView.setAdapter(mAdapter = new HomeAdapter());  
  113.                 mRecyclerView.addItemDecoration(new DividerItemDecoration(this,  
  114.                         DividerItemDecoration.VERTICAL));  
  115.                 mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));  
  116.                 break;  
  117.         }  
  118.     }  
  119.   
  120.     // 自定义内部Adapter  
  121.     class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {  
  122.   
  123.         @Override  
  124.         public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  
  125.             MyViewHolder holder = new MyViewHolder(LayoutInflater.from(  
  126.                     MainActivity.this).inflate(R.layout.item_home, parent,  
  127.                     false));  
  128.             return holder;  
  129.         }  

  130.         @Override  
  131.         public int getItemCount() {  
  132.             return mDatas.size();  
  133.         }  

  134.         class MyViewHolder extends RecyclerView.ViewHolder {  
  135.             TextView tv;    
  136.             public MyViewHolder(View view) {  
  137.                 super(view);  
  138.                 tv = (TextView) view.findViewById(R.id.id_num);  
  139.             }  
  140.         }  
  141.   
  142.         public void addData(int position) {  
  143.             mDatas.add(position, "Insert One");  
  144.             notifyItemInserted(position);  
  145.         }  
  146.   
  147.         public void removeData(int position) {  
  148.             mDatas.remove(position);  
  149.             notifyItemRemoved(position);  
  150.         }  
  151.   
  152.         // 点击事件  
  153.         private OnItemClickLitener mOnItemClickLitener;  
  154.         public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)  
  155.         {  
  156.             this.mOnItemClickLitener = mOnItemClickLitener;  
  157.         }  
  158.   
  159.         @Override  
  160.         public void onBindViewHolder(final MyViewHolder holder, final int position)  
  161.         {  
  162.             holder.tv.setText(mDatas.get(position));   
  163.             // 如果设置了回调,则设置点击事件  
  164.             if (mOnItemClickLitener != null)  
  165.             {  
  166.                 holder.itemView.setOnClickListener(new View.OnClickListener()  
  167.                 {  
  168.                     @Override  
  169.                     public void onClick(View v)  
  170.                     {  
  171.                         int pos = holder.getLayoutPosition();  
  172.                         mOnItemClickLitener.onItemClick(holder.itemView, pos);  
  173.                     }  
  174.                 });  
  175.   
  176.                 holder.itemView.setOnLongClickListener(new View.OnLongClickListener()  
  177.                 {  
  178.                     @Override  
  179.                     public boolean onLongClick(View v)  
  180.                     {  
  181.                         int pos = holder.getLayoutPosition();  
  182.                         mOnItemClickLitener.onItemLongClick(holder.itemView, pos);  
  183.                         return false;  
  184.                     }  
  185.                 });  
  186.             }  
  187.         }  
  188.     }   
  189. }  



在添加点击事件时,要常见一个类:
OnItemClickLitener:
[html] view plain copy
  1. package com.eightgroup.rikao1013;  
  2.   
  3. import android.view.View;  
  4.   
  5. /**  
  6.  * Created by 笔片 on 2017/10/13.  
  7.  */  
  8. public interface OnItemClickLitener  
  9. {  
  10.     void onItemClick(View view, int position);  
  11.     void onItemLongClick(View view , int position);  
  12. }  
接下来就来显示布局文件:activity_main.xml:
这其中在预览效果时是显示不出来效果的,只有运行。。。。才能展示效果
[html] view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.     <LinearLayout  
  6.         android:id="@+id/one"  
  7.         android:layout_width="match_parent"  
  8.         android:layout_height="wrap_content"  
  9.         android:orientation="horizontal">  
  10.         <Button  
  11.             android:id="@+id/id_action_add"  
  12.             android:layout_width="wrap_content"  
  13.             android:layout_height="wrap_content"  
  14.             android:text="添加"/>  
  15.         <Button  
  16.             android:id="@+id/id_action_delete"  
  17.             android:layout_width="wrap_content"  
  18.             android:layout_height="wrap_content"  
  19.             android:text="删除"/>  
  20.         <Button  
  21.             android:id="@+id/id_action_list"  
  22.             android:layout_width="wrap_content"  
  23.             android:layout_height="wrap_content"  
  24.             android:text="listview"/>  
  25.         <Button  
  26.             android:id="@+id/id_action_group"  
  27.             android:layout_width="wrap_content"  
  28.             android:layout_height="wrap_content"  
  29.             android:text="GroupView"/>  
  30.         <Button  
  31.             android:id="@+id/id_action_pubu"  
  32.             android:layout_width="wrap_content"  
  33.             android:layout_height="wrap_content"  
  34.             android:text="瀑布流"/>  
  35.     </LinearLayout>  
  36.   
  37.   
  38.     <android.support.v7.widget.RecyclerView  
  39.         android:layout_below="@id/one"  
  40.         android:id="@+id/id_recyclerview"  
  41.         android:divider="#ffff0000"  
  42.         android:dividerHeight="10dp"  
  43.         android:layout_width="match_parent"  
  44.         android:layout_height="match_parent" />  
  45.   
  46. </RelativeLayout>  

item_home.xml:
[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:background="#44ff0000"  
  5.     android:layout_height="wrap_content">  
  6.   
  7.     <TextView  
  8.         android:id="@+id/id_num"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="50dp"  
  11.         android:gravity="center"  
  12.         android:text="1" />  
  13.     <ImageView  
  14.         android:id="@+id/img"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:layout_marginLeft="100dp"  
  18.         android:src="@mipmap/ic_launcher"/>  
  19. </FrameLayout>  

以上就是RecyclerView的一些简单的基本操作,适合基础人员直接粘贴就可以使用了。
原创粉丝点击