下拉刷新+左滑删除的效果实现一:

使用谷歌官方的SwipeRefreshLayout和第三方左滑删除的库swipemenu-recyclerview

先看效果:

实现步骤:
1、导入swipemenu-recyclerview库
2、使用SwipeRefreshLayout包裹
3、代码

1、导入swipemenu-recyclerview库

dependencies { compile 'com.tubb.smrv:swipemenu-recyclerview:3.0.2' }

编写删除的布局:
itemmenu.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dp" android:layout_height="match_parent" android:background="#f00">    <Button  android:id="@+id/delete_button" android:layout_width="100dp" android:layout_height="match_parent" android:text="删除" /></LinearLayout>

编写item主布局:
itemcontent.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">    <Button  android:id="@+id/item_btn" android:layout_width="100dp" android:layout_height="wrap_content"/></LinearLayout>

编写swipmenu-recyclerview主布局:
将item主布局和删除布局引入,其中smContentView和smMenuView的id值不能变
swipitem.xml

<?xml version="1.0" encoding="utf-8"?><com.tubb.smrv.SwipeMenuLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="#0fa" android:layout_height="wrap_content">    <include  android:id="@id/smContentView" layout="@layout/itemcontent" />    <include  android:id="@id/smMenuView" layout="@layout/itemmenu" /></com.tubb.smrv.SwipeMenuLayout>

将自定义的SwipMenuRecyclerView引入主界面:
activity_main.xml:

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:id="@+id/swiprefresh"    android:layout_height="match_parent">    <com.tubb.smrv.SwipeMenuRecyclerView        android:id="@+id/listview"        android:layout_width="match_parent"        android:layout_height="wrap_content">    </com.tubb.smrv.SwipeMenuRecyclerView></android.support.v4.widget.SwipeRefreshLayout>

布局完成。

代码:
自定义一个类用来填充Item的内容
User.java

package com.example.eventbus.lhdswipmenu;/** * Created by LHD on 2016/6/25. */public class User {    String name;    public User(String mname) {        this.name = mname;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

监听itemview的点击事件的接口
onlhdSwipitemClickListener.java

package com.example.eventbus.lhdswipmenu;import android.view.View;/** * Created by LHD on 2016/6/25. */public interface OnlhdSwipItemClickListener {    public void onItemClick(View view,int position);}

实现adapter
lhdswipadapter.java

package com.example.eventbus.lhdswipmenu;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.Toast;import java.util.ArrayList;import java.util.List;/** * Created by LHD on 2016/6/25. */public class lhdswipadapter extends RecyclerView.Adapter<lhdswipadapter.ViewHolder> {    private List<User> mItems = new ArrayList<User>();    private Context mcontext;    private OnlhdSwipItemClickListener listener;    public lhdswipadapter(Context context, List<User> users, OnlhdSwipItemClickListener mlistner) {        this.mcontext = context;        this.mItems = users;        this.listener = mlistner;    }    @Override    public lhdswipadapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View v = LayoutInflater.from(mcontext).inflate(R.layout.swipeitem, parent, false);        ViewHolder vh = new ViewHolder(v, this.listener);        return vh;    }    @Override    public void onBindViewHolder(ViewHolder holder, final int position) {        final ViewHolder mholder = holder;        User user = mItems.get(position);        mholder.button.setText(user.name);        mholder.button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(mcontext, "点击了第" + position + "个Button", Toast.LENGTH_SHORT).show();            }        });        mholder.deletebutton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mItems.remove(position);                notifyItemRemoved(position);            }        });    }    @Override    public int getItemCount() {        return mItems.size();    }    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {        private OnlhdSwipItemClickListener mListener;        private Button button;        private Button deletebutton;        public ViewHolder(View itemView, OnlhdSwipItemClickListener Listener) {            super(itemView);            button = (Button) itemView.findViewById(R.id.item_btn);            deletebutton = (Button) itemView.findViewById(R.id.delete_button);            this.mListener = Listener;            itemView.setOnClickListener(this);        }        @Override        public void onClick(View v) {            if (mListener != null) {                mListener.onItemClick(v, getAdapterPosition());            }        }    }}

实现分割线效果:
DividerItemDecoration.java

package com.example.eventbus.lhdswipmenu;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.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;/** * Created by ls on 2016/3/21. */public class DividerItemDecoration 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 DividerItemDecoration(Context context, int orientation) {        final TypedArray a = context.obtainStyledAttributes(ATTRS);        mDivider = a.getDrawable(0);        a.recycle();        setOrientation(orientation);    }    public void setOrientation(int orientation) {        if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {            throw new IllegalArgumentException("invalid orientation");        }        mOrientation = orientation;    }    @Override    public void onDraw(Canvas c, RecyclerView parent) {        if (mOrientation == VERTICAL_LIST) {            drawVertical(c, parent);        } else {            drawHorizontal(c, parent);        }    }    public 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);            android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext());            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child                    .getLayoutParams();            final int top = child.getBottom() + params.bottomMargin;            final int bottom = top + mDivider.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }    public 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;            final int right = left + mDivider.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }    @Override    public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {        if (mOrientation == VERTICAL_LIST) {            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());        } else {            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);        }    }}

实现主页面代码:
MainActivity.java

package com.example.eventbus.lhdswipmenu;import android.os.Bundle;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.Toast;import java.util.ArrayList;import java.util.List;import java.util.logging.Handler;public class MainActivity extends AppCompatActivity {    private RecyclerView recyclerView;    private List<User> users = new ArrayList<User>();    private OnlhdSwipItemClickListener mlistener;    private lhdswipadapter adapter;    private SwipeRefreshLayout swipeRefreshLayout;private Handler handler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initswiprefresh();        LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);        mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);        recyclerView = (RecyclerView) findViewById(R.id.listview);        recyclerView.setLayoutManager(mLayoutManager);        recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));        initdata();        recyclerView.setAdapter(adapter);    }    private void initdata() {        users.add(new User("1"));        users.add(new User("2"));        users.add(new User("3"));        users.add(new User("4"));        users.add(new User("5"));        users.add(new User("6"));        users.add(new User("7"));        users.add(new User("8"));        users.add(new User("9"));        adapter = new lhdswipadapter(MainActivity.this, users, new OnlhdSwipItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(MainActivity.this, "点击了第" + position + "个View", Toast.LENGTH_SHORT).show();            }        });    }    private void initswiprefresh() {        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swiprefresh);        swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_light, android.R.color.holo_red_light, android.R.color.holo_orange_light, android.R.color.holo_green_light);        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {            @Override            public void onRefresh() {                users.add(new User("a"));                users.add(new User("b"));                users.add(new User("c"));                users.add(new User("d"));                users.add(new User("e"));                swipeRefreshLayout.setRefreshing(false);                adapter.notifyDataSetChanged();            }        });    }}

这样就完成了,其中Item的主界面布局和删除布局都可以自定义。

代码下载:

http://dl.download.csdn.net/down11/20160625/805178d21800085b6b188344ae5d33a8.zip?response-content-disposition=attachment%3Bfilename%3D%22LHDSwipmenu.zip%22&OSSAccessKeyId=9q6nvzoJGowBj4q1&Expires=1466871030&Signature=Y9qjUheSLHaLGwjXTIK%2FalGsjv0%3D

更多相关文章

  1. TabHost使用小结
  2. Android开发之自定义Notification(源代码分享)
  3. Android-MVVM架构-Data Binding的使用
  4. Android(安卓)稀奇古怪的问题
  5. 读书笔记——《Android(安卓)开发艺术探索》Activity工作过程阅
  6. Android(安卓)UI—仿微信底部导航栏布局
  7. Android(安卓)DataBinding的使用
  8. android代码中打开系统设置界面 .
  9. Android(安卓)学习笔记之界面布局

随机推荐

  1. android拍照图片选取与图片剪裁
  2. Android 学习资料收集汇总
  3. [Android]APK程序卸载二次确认的实现
  4. android开发打印票据或文档的方法:android
  5. Android 小項目之--猜名字有獎!RadionButt
  6. 关于android图片的传输,android图片传输方
  7. android中发生OOM探究及解决
  8. Unity3D For Android 开发教程【转http:/
  9. Android(安卓)Things学习的一点体验
  10. Android Q (十七) Android Q 行为变更:以