android下拉刷新+左滑删除的实现(第一种方式)
下拉刷新+左滑删除的效果实现一:
使用谷歌官方的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
更多相关文章
- TabHost使用小结
- Android开发之自定义Notification(源代码分享)
- Android-MVVM架构-Data Binding的使用
- Android(安卓)稀奇古怪的问题
- 读书笔记——《Android(安卓)开发艺术探索》Activity工作过程阅
- Android(安卓)UI—仿微信底部导航栏布局
- Android(安卓)DataBinding的使用
- android代码中打开系统设置界面 .
- Android(安卓)学习笔记之界面布局