6.RecyclerView的使用(包括分割线的设置,item点击事件的监听,以及recyclorview中数据的改变)
来源:互联网 发布:剑网三光头捏脸数据 编辑:程序博客网 时间:2024/06/06 07:04
1.在build中编写recyclerView的dependence依赖
2.在相应的布局中编写recyclorView的控件
3.在Activity中实例化recyclorView
4.编写adapter中item的布局
5.编写adapter继承自RecyclorView的adapter
6.在Activity中实例化adapter,并且调用
代码;
1.
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.0' compile "com.android.support:recyclerview-v7:23.0.1"}//compile "com.android.support:recyclerview-v7:23.0.1"是对recyclerview的依赖
2.
<android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" ></android.support.v7.widget.RecyclerView>
3.在Activity中实例化receyclorView,并且实例化配置adapter
private List<String> list=new ArrayList<>();
private void initRecyclerView(View view) { recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view); initList(); homeCategoryAdapter=new HomeCategoryAdapter(list); //加载adapter recyclerView.setAdapter(homeCategoryAdapter); //必须写才能出现recyclorView recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));}private void initList(){ list.add("one"); list.add("one"); list.add("one"); list.add("one"); list.add("one"); list.add("one");}
4.item布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/item_text_view" android:layout_width="match_parent" android:layout_height="80sp" /></LinearLayout>
5.adapter适配器的实现步骤:
1.创建HomeCategoryAdapter继承自RecyclerView.Adapter,并且要写它的泛型
2.写内部类ViewHolder extends RecyclerView.ViewHolder,实现他的方法
3.实现HomeCategoryAdapter的方法
4.编写HomeCategoryAdapter的构造函数
5.先实例化布局,然后实例化控件,然后绑定数据
package zuo.com.ui.adapter;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;import zuo.com.ui.R;/** * Created by Administrator on 2016/10/8. */public class HomeCategoryAdapter extends RecyclerView.Adapter<HomeCategoryAdapter.ViewHolder> { private List<String> list; private LayoutInflater layoutInflater; public HomeCategoryAdapter(List<String> list){ this.list=list; } //绑定item布局文件,然后在内部类ViewHolder中绑定item布局文件中的子控件 @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { layoutInflater=LayoutInflater.from(parent.getContext()); View view=layoutInflater.inflate(R.layout.item_homeadapter,parent,false); return new ViewHolder(view); } //绑定数据,即绑定子空间中的数据 @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.textView.setText(list.get(position)); } //返回数据的大小 @Override public int getItemCount() { return list.size(); }// 绑定item布局文件中的子控件 class ViewHolder extends RecyclerView.ViewHolder{ private TextView textView; public ViewHolder(View itemView) { super(itemView); textView= (TextView) itemView.findViewById(R.id.item_text_view); } }}
6.调用adapter
//必须写才能出现recyclorView
recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));
private void initRecyclerView(View view) { recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view); initList(); homeCategoryAdapter=new HomeCategoryAdapter(list); //加载adapter recyclerView.setAdapter(homeCategoryAdapter); //必须写才能出现recyclorView,可以写成GirdLayout()这样recyclerview就会显示不同的形式 recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));}private void initList(){ list.add("one"); list.add("one"); list.add("one"); list.add("one"); list.add("one"); list.add("one");}
二、分割线的设置渲染:receclorview的分割线和listview不同,可以自定义渲染效果,但是需要创建一个类HomeItemDecoration继承自RececlorView.RecyclerView.ItemDecoration
1.HomeItemDecoration代码:
package zuo.com.ui.decoration;import android.graphics.Canvas;import android.graphics.Rect;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;/**用于渲染recyclorView分割线 * Created by Administrator on 2016/10/9. */public class HomeItemDecoration extends RecyclerView.ItemDecoration { //渲染item之前调用的方法 @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDraw(c, parent, state); } //渲染完之后调用的方法 @Override public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDrawOver(c, parent, state); } //s设置item的边距 @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); int layoutOrientation = getOrientation(parent); if (layoutOrientation == LinearLayoutManager.VERTICAL) { outRect.top = 10; outRect.left=5; outRect.right=5; } else if(layoutOrientation == LinearLayoutManager.HORIZONTAL) { outRect.left = 5; } } private int getOrientation(RecyclerView parent) { if (parent.getLayoutManager() instanceof LinearLayoutManager) { LinearLayoutManager layoutManager = (LinearLayoutManager) parent.getLayoutManager(); return layoutManager.getOrientation(); } else throw new IllegalStateException("DividerItemDecoration can only be used with a LinearLayoutManager."); }}
2.调用分割线:
private void initRecyclerView(View view) { recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view); initList(); homeCategoryAdapter=new HomeCategoryAdapter(list); //加载adapter recyclerView.setAdapter(homeCategoryAdapter); //必须写才能出现recyclorView,也可以是GirdLayoutManager,只是显示item的图形不一样 recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); //设置分割线 recyclerView.addItemDecoration(new HomeItemDecoration());}
三、item点击事件的监听,在adapter中编写OnClickListener()
1.首先在adapter中定义一个监听器interface OnItemClickListener{},定义一个方法OnClick(View v,int position,String city)
2.在adapter中创建接口的对象,然后创建一个方法为构造函数setOnItemClickListene()
3.在Viewholder中绑定监听事件,如果对button 绑定点击事件
button.setOnclickListener()
4.最后在Activity中,调用自定义的监听事件,调用方法为setOnItemClickListene()
代码:
1.
//创建recyclorview的监听事件 public interface OnItemClickListener{ void onClick(View v,int position,String city); }
2.
public OnItemClickListener listener; //创建item监听器对象public void setOnItemClickListener(OnItemClickListener listener){ //创建构造函数 this.listener=listener;}
3.
// 绑定item布局文件中的子控件 class ViewHolder extends RecyclerView.ViewHolder{ private TextView textView; public ViewHolder(View itemView) { super(itemView); textView= (TextView) itemView.findViewById(R.id.item_text_view); //绑定item的点击事件 itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(listener!=null){ listener.onClick(v,getLayoutPosition(),list.get(getLayoutPosition())); } } }); } }
4.
private void initRecyclerView(View view) { recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view); initList(); homeCategoryAdapter=new HomeCategoryAdapter(list); //加载adapter recyclerView.setAdapter(homeCategoryAdapter); //必须写才能出现recyclorView,也可以是GirdLayoutManager,只是显示item的图形不一样 recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); //设置分割线 recyclerView.addItemDecoration(new HomeItemDecoration());
//item的监听事件 homeCategoryAdapter.setOnItemClickListener(new HomeCategoryAdapter.OnItemClickListener() { @Override public void onClick(View v, int position, String city) { Toast.makeText(getContext(),"点击成功",Toast.LENGTH_SHORT).show(); } });}
三、recyclorView中数据的改变
1.在adapter中编写增加数据和减少数据的函数
2.然后在调用设置adapter的class中调用(调用没有完成)
- 6.RecyclerView的使用(包括分割线的设置,item点击事件的监听,以及recyclorview中数据的改变)
- RecyclerView的Item设置点击监听事件
- RecyclerView中ItemDecorationd的简单使用(二)---为item设置分割线
- 设置RecyclerView的item的点击事件
- RecyclerView的item的分割线
- RecyclerView的分割线+回调接口的点击事件(点击事件+长按的点击事件)
- RecyclerView Item 的点击事件
- RecyclerView的item点击事件
- RecyclerView的item点击事件
- RecyclerView的item点击事件
- RecyclerView的Item点击事件
- RecyclerView的item点击事件
- 给RecyclerView的item添加点击监听事件
- 给RecyclerView的item添加点击监听事件
- ListView设置item的行间距,以及去掉分割线
- android recyclerview的使用,添加分割线,点击,长按事件
- RecyclerView的分割线
- recyclerView的分割线
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 习题8.18
- 程序控制
- 51Nod-石子归并问题(DP解法)
- 服务器控件 onclientclick和onclick区别
- 6.RecyclerView的使用(包括分割线的设置,item点击事件的监听,以及recyclorview中数据的改变)
- 软件爱 设计模式--工厂模式(简单工厂,工厂方法,抽象工厂)
- 怎么开发一款区块链
- 魂系列游戏机制分析
- 【HDU】5604 merge【set练习题】
- GoDemo:给定数字字符串求可能的ip组合,数字顺序不变
- Android动画小结
- 正态分布中normpdf和normcdf的区别
- 数据库基础与索引