学习笔记之RecyclerView
首先,创建一个新的项目,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相关推荐
- 【学习笔记】RecyclerView的使用
2019独角兽企业重金招聘Python工程师标准>>> 为什么叫做RecyclerView? 不关心Item是否显示在正确的位置,如何显示.(LayoutManager) 不关心It ...
- 学习笔记:Recyclerview、SwipeRefreshLayout、Cardview的使用
一.Recyclerview 1.简介 Recyclerview是Android 5.0新增的一个列表控件.顾名思义,recycler view,只负责回收和复用视图,高度的解耦,可灵活定制,轻松实现 ...
- Android学习笔记:Android基础知识点(不断更新中)
1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...
- Android:日常学习笔记(8)———探究UI开发(5)
Android:日常学习笔记(8)---探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...
- Android Studio --- [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手
说明 源代码 在2.x里有TCP的三次挥手与四次握手,先对它进行简单的回答(百度).预计在下一篇里,会继续说明TCP 接上一篇: Android Studio - > [学习笔记]Button. ...
- android学习笔记----ListView和各种适配器简介
学习笔记 目录 打气筒(LayoutInflater对象)介绍: ArrayAdapter用法: 关于具有自定义 ArrayAdapter 的示例应用见这里: SimpleAdapter用法: 关于L ...
- Android高级终端开发学习笔记(《疯狂Android讲义》第2章-第10章)
Android疯狂讲义前10章知识点总结 /-------------------------10-31号晚上学习笔记----------------------------/ 在设置了最小支持版本为 ...
- Android学习笔记 93. Room、LiveData 和 ViewModel
Android学习笔记 Android 开发者基础知识 (Java) -- Google Developers 培训团队 文章目录 Android学习笔记 Android 开发者基础知识 (Java) ...
- java/android 设计模式学习笔记(6)---适配器模式
这篇来介绍一下适配器模式(Adapter Pattern),适配器模式在开发中使用的频率也是很高的,像 ListView 和 RecyclerView 的 Adapter 等都是使用的适配器模式.在我 ...
最新文章
- Java面向对象 第3节 类的封装和继承
- shell中强制声明变量
- Spring boot访问静态资源
- 连接sftp服务器命令
- SAP Spartacus 如何重定义登录 Login Component
- matlab利用霍夫,基于matlab的霍夫变换
- linux tcp压测工具,02.监控和压测工具 - 2.4.压测工具 - 《Linux性能调优指南》 - 书栈网 · BookStack...
- java切片_ java中一个极其强悍的新特性Stream详解(非常实用)
- Windows 10 开启有线无线802.1x脚本
- java responsebody_java – 在一种情况下返回@ResponseBody,在另一种情况下返回ModelAndView...
- Android内存泄漏(转)
- Hyperledger Fabric 节点类型Commiter、Endorser、Leader、Anchor
- YDOOK:STM32: 最新版选型手册下载 2021
- JAVA空间换时间以及时间换空间的例子
- 栈和队列的共同处和不同处
- ios学习路线图_iOS开发学习路线 +技巧整理
- windows立方体桌面
- 2.Apache服务器配置(Ubuntu)
- 技术债务管理_管理技术债务
- 微信小程序学习笔记一 + 小程序介绍 前置知识