Main类
package com.scout.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.Toast;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {    RecyclerView recyclerView;    private RAdapter mAdapter;    private RecyclerView.LayoutManager mLayoutManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initData();        initView();    }    private void initData() {        mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);        mAdapter = new RAdapter(getData());        mAdapter.setOnItemClickListener(new RAdapter.OnItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(MainActivity.this,"短按" + position + " item", Toast.LENGTH_SHORT).show();            }            @Override            public void onItemLongClick(View view, int position) {                Toast.makeText(MainActivity.this,"长按 " + position + " item", Toast.LENGTH_SHORT).show();            }        });    }    private void initView() {        recyclerView = (RecyclerView) findViewById(R.id.recyclertest);        recyclerView.addItemDecoration(new MyDividerItemDecoration(this, LinearLayoutManager.VERTICAL));        // 设置布局管理器        recyclerView.setLayoutManager(mLayoutManager);        // 设置adapter        recyclerView.setAdapter(mAdapter);    }    private ArrayList getData() {        ArrayList data = new ArrayList<>();        String temp = " item";        for(int i = 0; i < 20; i++) {            data.add(i + temp);        }        return data;    }}
   
  分割线:
   
package com.scout.myapplication;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Rect;import android.graphics.drawable.Drawable;import android.support.v4.view.ViewCompat;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;/** * Created by liuguodong on 2017/8/30. */public class MyDividerItemDecoration extends RecyclerView.ItemDecoration {    private static final int[] ATTRS = new int[]{            android.R.attr.listDivider    };    public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;    public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;    /**     * 用于绘制间隔样式     */    private Drawable mDivider;    /**     * 列表的方向,水平/竖直     */    private int mOrientation;    public MyDividerItemDecoration(Context context, int orientation) {        // 获取默认主题的属性        final TypedArray a = context.obtainStyledAttributes(ATTRS);        mDivider = a.getDrawable(0);        a.recycle();        setOrientation(orientation);    }    @Override    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {        // 绘制间隔        if (mOrientation == VERTICAL_LIST) {            drawVertical(c, parent);        } else {            drawHorizontal(c, parent);        }    }    @Override    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {        if (mOrientation == VERTICAL_LIST) {            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());        } else {            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);        }    }    private void setOrientation(int orientation) {        if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {            throw new IllegalArgumentException("invalid orientation");        }        mOrientation = orientation;    }    /**     * 绘制间隔     */    private void drawVertical(Canvas c, RecyclerView parent) {        final int left = parent.getPaddingLeft();        final int right = parent.getWidth() - parent.getPaddingRight();        final int childCount = parent.getChildCount();        for (int i = 0; i < childCount; i++) {            final View child = parent.getChildAt(i);            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child                    .getLayoutParams();            final int top = child.getBottom() + params.bottomMargin +                    Math.round(ViewCompat.getTranslationY(child));            final int bottom = top + mDivider.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }    /**     * 绘制间隔     */    private void drawHorizontal(Canvas c, RecyclerView parent) {        final int top = parent.getPaddingTop();        final int bottom = parent.getHeight() - parent.getPaddingBottom();        final int childCount = parent.getChildCount();        for (int i = 0; i < childCount; i++) {            final View child = parent.getChildAt(i);            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child                    .getLayoutParams();            final int left = child.getRight() + params.rightMargin +                    Math.round(ViewCompat.getTranslationX(child));            final int right = left + mDivider.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }}

   
  适配器:
   
package com.scout.myapplication;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.ArrayList;/** * Created by liuguodong on 2017/8/30. */public class RAdapter extends RecyclerView.Adapter{    /**     * 展示数据     */    private ArrayList mData;    /**     * 事件回调监听     */    public OnItemClickListener onItemClickListener;    public RAdapter(ArrayList data) {        this.mData = data;    }    public void updateData(ArrayList data) {        this.mData = data;        notifyDataSetChanged();    }    /**     * 添加新的Item     */    public void addNewItem() {        if(mData == null) {            mData = new ArrayList<>();        }        mData.add(0, "new Item");        notifyItemInserted(0);    }    /**     * 删除Item     */    public void deleteItem() {        if(mData == null || mData.isEmpty()) {            return;        }        mData.remove(0);        notifyItemRemoved(0);    }    /**     * 设置回调监听     *     * @param listener     */    public void setOnItemClickListener(OnItemClickListener listener) {        this.onItemClickListener = listener;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        // 实例化展示的view        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_rv_item, parent, false);        // 实例化viewholder        ViewHolder viewHolder = new ViewHolder(v);        return viewHolder;    }    @Override    public void onBindViewHolder(final ViewHolder holder, int position) {        // 绑定数据        holder.mTv.setText(mData.get(position));        holder.itemView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(final View v) {                if(onItemClickListener != null) {                    int pos = holder.getLayoutPosition();                    onItemClickListener.onItemClick(holder.itemView, pos);                }            }        });        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View v) {                if(onItemClickListener != null) {                    int pos = holder.getLayoutPosition();                    onItemClickListener.onItemLongClick(holder.itemView, pos);                }                //表示此事件已经消费,不会触发单击事件                return true;            }        });    }    @Override    public int getItemCount() {        return mData.size();    }    public static class ViewHolder extends RecyclerView.ViewHolder {        TextView mTv;        public ViewHolder(View itemView) {            super(itemView);            mTv = (TextView) itemView.findViewById(R.id.item_tv);        }    }    public interface OnItemClickListener {        void onItemClick(View view, int position);        void onItemLongClick(View view, int position);    }}
适配器对应的布局 view_rv_item.xml
   
<?xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="50dp">            android:id="@+id/item_tv"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center"        />

 Main类对应的布局 activity_main.xml
   
   
<?xml version="1.0" encoding="utf-8"?>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.scout.myapplication.MainActivity">        android:id="@+id/recyclertest"      android:layout_width="match_parent"      android:layout_height="match_parent">  

  注意:main类布局不要用最新的约束布局
   有问题欢迎及时交流 
   源码下载地址:http://download.csdn.net/download/liu3364575/9957931

更多相关文章

  1. Android从下往上(动画)滑出窗口
  2. Android一种欢迎界面全屏显示方法
  3. Android(安卓)PopupWindows使用
  4. AndroidStudio调用摄像头
  5. android-仿iOS弹出框
  6. RecyclerView指定布局管理器
  7. Android文字跑马灯
  8. android中的有道词典
  9. View 绘制机制 -- How Android(安卓)Draws Views

随机推荐

  1. android ViewFilpper(二)
  2. 倍数提高工作效率的 Android(安卓)Studio
  3. 一个android颜色识别器
  4. 记录targetSdkVersion升级以后Android遇
  5. Path
  6. Android(安卓)网络:使用URL访问网络资源,Im
  7. [翻译] Android(安卓)Data Binding(4):
  8. Android判断服务是否运行及定位问题实例
  9. Android属性动画---Property Animation(六
  10. Android(安卓)SeekBar控件