【安卓笔记】RecyclerView+SwipeRefreshLayout示例

通过这篇文章你将学会:

1.RecyclerView的基本用法;

2.SwipeRefreshLayout的基本用法;

3.为RecyclerView的item添加响应事件。

RecyclerView简单说下,它是用来替代传统ListView的,RecyclerView更加灵活,而且可以与动画很好的结合,你可以很方便的为每个item增加各种动画效果,另外,RecyclerView强制使用ViewHolder模式,,可以提高性能。

截图:

步骤:

1.添加依赖:

compile ‘com.android.support:recyclerview-v7:21.0.0’ compile ‘com.android.support:support-v4:22.0.0’2.编写activity布局:<RelativeLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.taobao.recyclerviewwithrefresh.ui.activity.GridActivity"><android.support.v4.widget.SwipeRefreshLayoutandroid:id="@+id/refreshLayout_grid"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerView_grid"android:layout_width="match_parent"android:layout_height="match_parent"android:scrollbars="vertical"></android.support.v7.widget.RecyclerView></android.support.v4.widget.SwipeRefreshLayout></RelativeLayout>3.编写每个item的布局:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=""android:orientation="horizontal"android:layout_width="match_parent"xmlns:tools=""android:layout_height="50dp"><ImageViewandroid:src="@mipmap/ic_launcher"android:padding="5dp"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:textSize="18sp"android:gravity="center"android:layout_height="match_parent"tools:text="ss"/></LinearLayout>

4.数据源:

package com.taobao.recyclerviewwithrefresh.data;import java.util.ArrayList;import java.util.List;/** * Created by Rowandjj on 2015/3/24. */public class DataSource{public static final List<String> generateData(int size){if (size <= 0)return null;List<String> datas = new ArrayList<>();for (int i = 0; i < size; i++){datas.add("这是列表数据"+i);}return datas;}}5.分隔条:package com.taobao.recyclerviewwithrefresh.ui.adapter;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.support.v7.widget.RecyclerView;import android.view.View;/** * Created by Rowandjj on 2015/3/24. */public class MyItemDecoration extends RecyclerView.ItemDecoration{private static final int[] ATTRS = {android.R.attr.listDivider};private Drawable mDivider;public MyItemDecoration(Context context){TypedArray array = context.obtainStyledAttributes(ATTRS);// 获取分隔条mDivider = array.getDrawable(0);array.recycle();}@Overridepublic void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state){super.onDrawOver(c, parent, state);int count = parent.getChildCount();int left = parent.getPaddingLeft();int right = parent.getWidth()-parent.getPaddingRight();for(int i = 0; i < count; i++){View v = parent.getChildAt(i);RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) v.getLayoutParams();int top = v.getBottom() + params.bottomMargin;int bottom = top + mDivider.getIntrinsicHeight();mDivider.setBounds(left,top,right,bottom);mDivider.draw(c);}}}6.编写数据适配器,并为其增加点击响应事件package com.taobao.recyclerviewwithrefresh.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 com.taobao.recyclerviewwithrefresh.R;import java.util.List;/** * Created by Rowandjj on 2015/3/24. * */public class MainRecyclerAdapter extends RecyclerView.Adapter<MainRecyclerAdapter.ViewHolder>{private List<String> datas = null;private OnItemClickListener mListener;public void setOnItemClickListener(OnItemClickListener listener){this.mListener = listener;}public MainRecyclerAdapter(List<String> datas){this.datas = datas;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){final View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);itemView.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){if(mListener != null){mListener.OnItemClick(v, (String) itemView.getTag());}}});return new ViewHolder(itemView);}@Overridepublic void onBindViewHolder(ViewHolder holder, int position){String s = datas.get(position);holder.bindData(s);holder.itemView.setTag(s);}@Overridepublic int getItemCount(){return datas.size();}/*** 批量增加* */public void addItems(List<String> items){if (items == null)return;this.datas.addAll(0, items);this.notifyItemRangeInserted(0, items.size());}public interface OnItemClickListener{public void OnItemClick(View view,String data);}static class ViewHolder extends RecyclerView.ViewHolder{private TextView mContent;public ViewHolder(View itemView){super(itemView);mContent = (TextView) itemView.findViewById(R.id.tv);}public void bindData(String s){if (s != null)mContent.setText(s);}}}

即使没有收获的希望也心平气和的继续。

【安卓笔记】RecyclerView+SwipeRefreshLayout示例

相关文章:

你感兴趣的文章:

标签云: