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中调用(调用没有完成)