最近因为比赛需要实现瀑布流的界面,学习了RecyclerView,具体分别实现了ListView,GridView,StaggerView各个方向,这里用的喜欢的伊吹大大的美图

首先,创建一个新的项目,res下创建新的资源文件menu下添加二级菜单具体内容以StaggerView为例

    <item android:title="StaggerView效果"android:id="@+id/stagger_view"><menu><item android:title="垂直标准"android:id="@+id/stagger_view_vertical_stander"/><item android:title="垂直反向"android:id="@+id/stagger_view_vertival_reverse"/><item android:title="水平标准"android:id="@+id/stagger_view_horizontal_stander"/><item android:title="水平反向"android:id="@+id/stagger_view_horizontal_reverse"/></menu></item>

MainActivity中复写onCreateOptionsmenu,onOptionsItemSelected方法,实现在界面右上角添加二级菜单,

onCreateOptionsMenu中获取menu中的内容,onOptionsItemSelected使用switch case设置选择事件,通过id的选择实现不同内容,点击ListView的id时,实现showlist()方法,GridView的id实现showgrid(),StaggerView的id实现showstagger()方法
 private void ShowStagger(boolean isVertical,boolean isReverse) {StaggeredGridLayoutManager layoutManager =new StaggeredGridLayoutManager(2,isVertical? StaggeredGridLayoutManager .VERTICAL: LinearLayoutManager.HORIZONTAL) ;layoutManager.setReverseLayout(isReverse ) ;mlist.setLayoutManager(layoutManager ) ;mAdapter =new StaggerAdapter(mData ) ;mlist .setAdapter(mAdapter  ) ;initListener() ;}
}
创建方法initData()模拟数据,创建集合,循环中创建对象,将对象添加到集合中
    private void initData() {//List------>>Adapter------>setAdapter------>显示数据mData = new ArrayList<>();//创建集合for(int i = 0; i< Datas.icons .length ; i++){ItemBean data = new ItemBean();//创建对象data.icon=Datas.icons [i];data.title="第"+(i+1)+"个条目";mData.add(data);//将对象添加到集合}}

以ShowStagger为例:方法中首先创建布局管理layoutmanger, setOrientation,setReverseLayout设置ListView的方向,之后创建适配器StaggerViewAdapter继承

 RecyclerView.Adapter<RecyclerViewBaseAdapter.InnerHolder>,实现其中的所有方法,由于RecyclerView没有点击Item事件,需要重新创建方法,可以找到ListView,向上找到OnItenClickListener,复制其中的方法

,因为三个布局都需要调用同样的适配器,在此之前创建RecyclerViewBaseAdapter,RecyclerViewBaseAdapter中设置数据:创建一个新的Java:ItemBean,创建一个List储存ItemBean

StaggerAdapter需要继承RecyclerViewBaseAdapter,使用时,直接调用
下面放出全部代码,适配器差不多就只放出RecyclerViewBaseAdapter和StaggerAdapte的代码

activity_main

<?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"tools:context="com.example.asus.recyclerview.MainActivity"><android.support.v4.widget.SwipeRefreshLayoutandroid:id="@+id/refresh"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recycler_view"android:layout_width="match_parent"android:layout_height="match_parent"/></android.support.v4.widget.SwipeRefreshLayout>
</android.support.constraint.ConstraintLayout>

Datas

import com.example.asus.recyclerview.R;public class Datas {public static int[] icons={R.mipmap.pic_1 ,R.mipmap.pic_2 ,R.mipmap.pic_3 ,R.mipmap.pic_4 ,R.mipmap.pic_5 ,R.mipmap.pic_6 ,R.mipmap.pic_7 ,};}

ItemBean

public class ItemBean {public int icon;public String title;
}

MainActivity

public class MainActivity extends AppCompatActivity {private static final String TAG ="MainActivity" ;private RecyclerView mlist;private List<ItemBean> mData;private RecyclerViewBaseAdapter mAdapter;private  SwipeRefreshLayout mrefresh;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mlist = findViewById(R.id.recycler_view);mrefresh=this.findViewById(R.id.refresh) ;initData();//初始化显示LISTVIEWShowList(true,false);initListener();//recyclerview中没有处理点击事件的方法,要自己实现PullDownUpdate();}/*   private void PullDownUpdate() {mrefresh.setEnabled(true);mrefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {@Overridepublic void onRefresh() {/*执行刷新数据的操作一般来说请求数据,重开线程处理,现在模拟数据*/ItemBean data=new ItemBean() ;data.icon=R.mipmap.pic_2;data.title ="添加的新数据";mData.add(0,data) ;new Handler().postDelayed(new Runnable() {@Overridepublic void run() {mAdapter.notifyDataSetChanged();mrefresh.setRefreshing(false);}},3000);}}) ;}
*/private void initListener() {mAdapter.setOnItemClickListener(new RecyclerViewBaseAdapter.OnItemClickListener() {@Overridepublic void onItemClick(int position) {//接口实现:Toast或者跳转界面都可以实现Toast.makeText(MainActivity.this,"您点击了第"+position+"个条目",Toast.LENGTH_SHORT).show() ;}});}//模拟数据private void initData() {//List------>>Adapter------>setAdapter------>显示数据mData = new ArrayList<>();//创建集合for(int i = 0; i< Datas.icons .length ; i++){ItemBean data = new ItemBean();//创建对象data.icon=Datas.icons [i];data.title="第"+(i+1)+"个条目";mData.add(data);//将对象添加到集合}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.menu,menu);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int itemId = item.getItemId();switch (itemId) {//ListViewcase R.id.list_view_vertical_stander:ShowList(true,false) ;break;case R.id.list_view_vertival_reverse:ShowList(true,true) ;break;case R.id.list_view_horizontal_stander:ShowList(false,false) ;break;case R.id.list_view_horizontal_reverse:ShowList(false,true) ;break;//GridViewcase R.id.grid_view_vertical_stander:ShowGrid(true,false );break;case R.id.grid_view_vertival_reverse:ShowGrid(true,true );break;case R.id.grid_view_horizontal_stander:ShowGrid(false ,false );break;case R.id.grid_view_horizontal_reverse:ShowGrid(false ,true );break;//StaggerViewcase R.id.stagger_view_vertical_stander:ShowStagger(true,false);break;case R.id.stagger_view_vertival_reverse:ShowStagger(true,true) ;break;case R.id.stagger_view_horizontal_stander:ShowStagger(false ,false );break;case R.id.stagger_view_horizontal_reverse:ShowStagger(false ,true ) ;break;}return super.onOptionsItemSelected(item);}private void ShowStagger(boolean isVertical,boolean isReverse) {StaggeredGridLayoutManager layoutManager =new StaggeredGridLayoutManager(2,isVertical? StaggeredGridLayoutManager .VERTICAL: LinearLayoutManager.HORIZONTAL) ;layoutManager.setReverseLayout(isReverse ) ;mlist.setLayoutManager(layoutManager ) ;mAdapter =new StaggerAdapter(mData ) ;mlist .setAdapter(mAdapter  ) ;initListener() ;}//实现GRIDVIEW效果private void ShowGrid(boolean isVertical,boolean isReverse) {GridLayoutManager layoutManager =new GridLayoutManager(this,2) ;layoutManager.setOrientation(isVertical? LinearLayoutManager.VERTICAL: LinearLayoutManager.HORIZONTAL) ;layoutManager .setReverseLayout(isReverse) ;mlist .setLayoutManager(layoutManager);mAdapter =new GridViewAdapter(mData);mlist .setAdapter(mAdapter);initListener() ;}private void ShowList(boolean isOrientation,boolean isReverse){LinearLayoutManager layoutManager =new LinearLayoutManager(this) ;//设置垂直还是水平layoutManager.setOrientation(isOrientation? LinearLayoutManager.VERTICAL: LinearLayoutManager.HORIZONTAL) ;//设置正向反向layoutManager .setReverseLayout(isReverse) ;mlist.setLayoutManager(layoutManager );//创建适配器mAdapter =new ListViewAdapter(mData ) ;mlist.setAdapter(mAdapter );initListener() ;}
}

RecyclerViewBaseAdapter

public abstract class RecyclerViewBaseAdapter extends RecyclerView.Adapter<RecyclerViewBaseAdapter.InnerHolder>{private List<ItemBean> mData ;private OnItemClickListener mOnItemClickListener;public RecyclerViewBaseAdapter(List<ItemBean> data){this.mData =data ;}@Overridepublic InnerHolder onCreateViewHolder(ViewGroup parent, int viewType) {//view是条目界面,得到view,创建InnerHolderView view=getSubView(parent, viewType);return new InnerHolder(view);}protected abstract View getSubView(ViewGroup parent,int viewType);@Override//绑定Holder,设置数据public void onBindViewHolder(InnerHolder holder, int position) {holder.setData(mData.get(position),position);}@Override//返回条目个数public int getItemCount() {if(mData!=null)return mData.size() ;return 0;}public void setOnItemClickListener(OnItemClickListener listener) {//设置监听就是设置一个回调接口this.mOnItemClickListener=listener;}/*设置接口步骤1.定义接口2.内部实现3.提供内部设置接口的方法:外部实现4.调用接口*/public interface OnItemClickListener{void onItemClick(int position);}public class InnerHolder extends RecyclerView.ViewHolder {private ImageView mIcon;private TextView mTitle;private int mposition;public InnerHolder(View itemView) {super(itemView);//找到条目控件mIcon=itemView.findViewById(R.id.icon);mTitle=itemView.findViewById(R.id.title);itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (mOnItemClickListener != null) {mOnItemClickListener.onItemClick(mposition) ;}}}) ;}public void setData(ItemBean itemBean,int position) {this.mposition=position;//设置数据mIcon.setImageResource(itemBean.icon);mTitle.setText(itemBean.title );}}
}

StaggerAdapter

public class StaggerAdapter extends RecyclerViewBaseAdapter {public StaggerAdapter(List<ItemBean> data) {super(data);}@Overrideprotected View getSubView(ViewGroup parent, int viewType) {View view=View.inflate(parent.getContext(), R.layout.stagger,null);return view;}
}

最后,好好学习天天向上 ,啦啦啦

学习笔记之RecyclerView相关推荐

  1. 【学习笔记】RecyclerView的使用

    2019独角兽企业重金招聘Python工程师标准>>> 为什么叫做RecyclerView? 不关心Item是否显示在正确的位置,如何显示.(LayoutManager) 不关心It ...

  2. 学习笔记:Recyclerview、SwipeRefreshLayout、Cardview的使用

    一.Recyclerview 1.简介 Recyclerview是Android 5.0新增的一个列表控件.顾名思义,recycler view,只负责回收和复用视图,高度的解耦,可灵活定制,轻松实现 ...

  3. Android学习笔记:Android基础知识点(不断更新中)

    1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...

  4. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)---探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  5. Android Studio --- [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手

    说明 源代码 在2.x里有TCP的三次挥手与四次握手,先对它进行简单的回答(百度).预计在下一篇里,会继续说明TCP 接上一篇: Android Studio - > [学习笔记]Button. ...

  6. android学习笔记----ListView和各种适配器简介

    学习笔记 目录 打气筒(LayoutInflater对象)介绍: ArrayAdapter用法: 关于具有自定义 ArrayAdapter 的示例应用见这里: SimpleAdapter用法: 关于L ...

  7. Android高级终端开发学习笔记(《疯狂Android讲义》第2章-第10章)

    Android疯狂讲义前10章知识点总结 /-------------------------10-31号晚上学习笔记----------------------------/ 在设置了最小支持版本为 ...

  8. Android学习笔记 93. Room、LiveData 和 ViewModel

    Android学习笔记 Android 开发者基础知识 (Java) -- Google Developers 培训团队 文章目录 Android学习笔记 Android 开发者基础知识 (Java) ...

  9. java/android 设计模式学习笔记(6)---适配器模式

    这篇来介绍一下适配器模式(Adapter Pattern),适配器模式在开发中使用的频率也是很高的,像 ListView 和 RecyclerView 的 Adapter 等都是使用的适配器模式.在我 ...

最新文章

  1. Java面向对象 第3节 类的封装和继承
  2. shell中强制声明变量
  3. Spring boot访问静态资源
  4. 连接sftp服务器命令
  5. SAP Spartacus 如何重定义登录 Login Component
  6. matlab利用霍夫,基于matlab的霍夫变换
  7. linux tcp压测工具,02.监控和压测工具 - 2.4.压测工具 - 《Linux性能调优指南》 - 书栈网 · BookStack...
  8. java切片_ java中一个极其强悍的新特性Stream详解(非常实用)
  9. Windows 10 开启有线无线802.1x脚本
  10. java responsebody_java – 在一种情况下返回@ResponseBody,在另一种情况下返回ModelAndView...
  11. Android内存泄漏(转)
  12. Hyperledger Fabric 节点类型Commiter、Endorser、Leader、Anchor
  13. YDOOK:STM32: 最新版选型手册下载 2021
  14. JAVA空间换时间以及时间换空间的例子
  15. 栈和队列的共同处和不同处
  16. ios学习路线图_iOS开发学习路线 +技巧整理
  17. windows立方体桌面
  18. 2.Apache服务器配置(Ubuntu)
  19. 技术债务管理_管理技术债务
  20. 微信小程序学习笔记一 + 小程序介绍 前置知识

热门文章

  1. Vulnhub 靶机 VulnOSv2 write up opendocman cms 32075 sql注入 账号密码 ssh连接 37292.c 脏牛提权
  2. 基于TBSS的DTI数据处理流程
  3. 【知识分享】带你认识注册表
  4. 达梦数据库备份方法总结学习
  5. idea 超实用的插件
  6. 云计算的未来:看「泛在计算」如何促进数字化生态和计算网络融合
  7. 豆豆趣事[2014年08月]
  8. 基于OpenGL的3D天空仿真
  9. FLV(ACC+H264)文件格式分析
  10. UE4鼠标滚轮轴缩放事件设置无效