From fc6c367b13ef0e0b4d1813101d1bd5258dbc3392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E5=8F=B6=E9=A3=98=E8=88=9F?= Date: Mon, 19 Sep 2016 17:56:55 +0800 Subject: [PATCH 1/3] Update README.md --- README.md | 265 +----------------------------------------------------- 1 file changed, 1 insertion(+), 264 deletions(-) diff --git a/README.md b/README.md index 3423c5b..17b9976 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ LRecyclerView是支持addHeaderView、 addFooterView、下拉刷新、分页加载数据的RecyclerView。 -新增功能:SwipeMenu系列功能,包括Item侧滑菜单、长按拖拽Item,滑动删除Item等。 **它对 RecyclerView 控件进行了拓展,给RecyclerView增加HeaderView、FooterView,并且不需要对你的Adapter做任何修改。** @@ -287,266 +286,6 @@ public static abstract class ViewHolder { mRecyclerView.setEmptyView(view); ``` -###SwipeMenuAdapter - -为了实现SwipeMenu的功能,此次新增了一个[SwipeMenuAdapter](https://github.com/jdsjlzx/LRecyclerView/blob/master/LRecyclerview_library/src/main/java/com/github/jdsjlzx/swipe/SwipeMenuAdapter.java)类。 - -SwipeMenuAdapter与library中已经存在的LRecyclerViewAdapter会不会冲突呢?答案是不会。SwipeMenuAdapter是用户级别的基类adapter,也就是用户需要继承SwipeMenuAdapter去实现自己的adapter,具体使用同以前。 - -SwipeMenuAdapter类的定义: -``` -public abstract class SwipeMenuAdapter extends RecyclerView.Adapter -``` - -实现自己的MenuAdapter: - -``` -public class MenuAdapter extends SwipeMenuAdapter { - - protected List mDataList = new ArrayList<>(); - - public MenuAdapter() { - } - - @Override - public int getItemCount() { - return mDataList.size(); - } - - @Override - public View onCreateContentView(ViewGroup parent, int viewType) { - return LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_text_swipe, parent, false); - } - - @Override - public MenuAdapter.DefaultViewHolder onCompatCreateViewHolder(View realContentView, int viewType) { - return new DefaultViewHolder(realContentView); - } - - @Override - public void onBindViewHolder(MenuAdapter.DefaultViewHolder holder, int position) { - - String item = mDataList.get(position).title; - - DefaultViewHolder viewHolder = holder; - viewHolder.tvTitle.setText(item); - } - - static class DefaultViewHolder extends RecyclerView.ViewHolder { - TextView tvTitle; - - public DefaultViewHolder(View itemView) { - super(itemView); - tvTitle = (TextView) itemView.findViewById(R.id.tv_title); - } - - } - -} -``` - -是不是很方便?MenuAdapter基本的功能都满足了,直接拷贝到项目中即可使用。 - -###左右两侧都有菜单 - -效果图: - - - -具体使用步骤如下。 - -- 为SwipeRecyclerView的Item创建菜单 -``` -// 设置菜单创建器。 -mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); -//设置菜单Item点击监听事件 -mRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener); -``` - -swipeMenuCreator完成了左右菜单的创建,menuItemClickListener实现了菜单的点击事件。 - -需要注意的是,LRecyclerView提供了下面两个方法,具体使用请详见demo。 - -``` -public void openLeftMenu(int position, int duration) { - openMenu(position, LEFT_DIRECTION, duration); - } - - public void openRightMenu(int position) { - openMenu(position, RIGHT_DIRECTION, SwipeMenuLayout.DEFAULT_SCROLLER_DURATION); - } -``` -openLeftMenu:打开item的左边菜单 -openRightMenu:打开item的右边菜单 - -这里关键的就是这个position(详细请参考demo)。 - - -###根据ViewType显示菜单 - -效果图: - - - -根据ViewType决定SwipeMenu在哪一行出现,可以左侧,可以右侧。 - -自定义MenuViewTypeAdapter,代码如下: -``` -public class MenuViewTypeAdapter extends MenuAdapter { - - public static final int VIEW_TYPE_MENU = 1; - public static final int VIEW_TYPE_NONE = 2; - - @Override - public int getItemViewType(int position) { - return position % 2 == 0 ? VIEW_TYPE_MENU : VIEW_TYPE_NONE; - } -} - -``` - -在实现swipeMenuCreator 时,需要根据ItemViewType值来决定是否创建左右菜单。 - -``` - private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { - @Override - public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { - // 根据Adapter的ViewType来决定菜单的样式、颜色等属性、或者是否添加菜单。 - if (viewType == MenuViewTypeAdapter.VIEW_TYPE_NONE) { - - // Do nothing. - } else if (viewType == MenuViewTypeAdapter.VIEW_TYPE_MENU) { - int size = getResources().getDimensionPixelSize(R.dimen.item_height); - - ...... - } - } - }; -``` - -###长按拖拽Item(List),与菜单结合 - -效果图: - - - -关键代码: -``` -mRecyclerView.setLongPressDragEnabled(true);// 开启拖拽功能 -mRecyclerView.setOnItemMoveListener(onItemMoveListener);// 监听拖拽,更新UI。 -``` - -onItemMoveListener具体如下: -``` - /** - * 当Item移动的时候。 - */ - private OnItemMoveListener onItemMoveListener = new OnItemMoveListener() { - @Override - public boolean onItemMove(int fromPosition, int toPosition) { - final int adjFromPosition = mLRecyclerViewAdapter.getAdapterPosition(true, fromPosition); - final int adjToPosition = mLRecyclerViewAdapter.getAdapterPosition(true, toPosition); - // 当Item被拖拽的时候。 - Collections.swap(mDataAdapter.getDataList(), adjFromPosition, adjToPosition); - //Be carefull in here! - mLRecyclerViewAdapter.notifyItemMoved(fromPosition, toPosition); - return true;// 返回true表示处理了,返回false表示你没有处理。 - } - - @Override - public void onItemDismiss(int position) { - // 当Item被滑动删除掉的时候,在这里是无效的,因为这里没有启用这个功能。 - // 使用Menu时就不用使用这个侧滑删除啦,两个是冲突的。 - } - }; -``` - -注意下面代码: - -``` -final int adjFromPosition = mLRecyclerViewAdapter.getAdapterPosition(true, fromPosition); -final int adjToPosition = mLRecyclerViewAdapter.getAdapterPosition(true, toPosition); -``` - -关于position的位置,为了大家使用方便,特在LRecyclerViewAdapter中提供了一个方法getAdapterPosition(boolean isCallback, int position)。 -> ->- isCallback 含义:position是否接口回调中带来的 -> - position 含义:如果不是接口回调,就是用户自己指定的position -> - getAdapterPosition(boolean isCallback, int position)只用于非LRecyclerViewAdapter提供的接口。 - -举例说明: - -- setOnItemMoveListener不是 LRecyclerViewAdapter自带接口(也就是内部方法),需要调用getAdapterPosition方法获得正确的position -- 如setOnItemClickLitener 是 LRecyclerViewAdapter自带接口,接口里面自带了position,用户就不必调用getAdapterPosition方法,直接使用就可以了。 -``` -mLRecyclerViewAdapter.setOnItemClickLitener(new OnItemClickLitener() { - @Override - public void onItemClick(View view, int position) { - String text = "Click position = " + position; - - } - - @Override - public void onItemLongClick(View view, int position) { - - - } - }); -``` - -###长按拖拽Item(Grid) - -效果图: - - - -与list功能一样,只是布局不一样。 - -###滑动直接删除Item - -效果图: - - - -注意: -> 滑动删除和滑动菜单是互相冲突的,两者只能出现一个。 - -关键代码: - -``` - -mRecyclerView.setLongPressDragEnabled(true); -mRecyclerView.setItemViewSwipeEnabled(true);// 开启滑动删除 -mRecyclerView.setOnItemMoveListener(onItemMoveListener);// 监听拖拽,更新UI - -``` - -按照配置就可以实现滑动删除。 - -###指定某个Item不能拖拽或者不能滑动删除 - -效果图: - - - -关键代码: - -``` - -mRecyclerView.setLongPressDragEnabled(true); -mRecyclerView.setItemViewSwipeEnabled(true);// 开启滑动删除。 -mRecyclerView.setOnItemMoveListener(onItemMoveListener);// 监听拖拽,更新UI。 mRecyclerView.setOnItemMovementListener(onItemMovementListener); - -``` - -###用SwipeMenuLayout实现你自己的侧滑 - -效果图: - - - -这个与LRecyclerView关系不大,但是与SwipeMenu关系密切。为了实现滑动菜单的功能,定义了SwipeMenuLayout,详细使用见demo。 - ##分组 @@ -577,14 +316,12 @@ mRecyclerView.setLScrollListener(LScrollListener); RecyclerViewUtils.setFooterView(mRecyclerView, new SampleFooter(this)); ``` -2.不要SwipeRefreshLayout与LRecyclerView一起使用,会有冲突。 +2.不要SwipeRefreshLayout与LRecyclerView一起使用,会有冲突,如果你实在想用,请参考 ##Thanks 1.[HeaderAndFooterRecyclerView](https://github.com/cundong/HeaderAndFooterRecyclerView) -2.[SwipeRecyclerView](https://github.com/yanzhenjie/SwipeRecyclerView) - ##打赏 From da533696fc09fda9f9c25e8d4c77cd1229e2db8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E5=8F=B6=E9=A3=98=E8=88=9F?= Date: Mon, 19 Sep 2016 17:57:52 +0800 Subject: [PATCH 2/3] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 17b9976..4f4060f 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,6 @@ LRecyclerView requires at minimum Java 7 or Android 4.0. 4. 具备item点击和长按事件; 5. 网络错误加载失败点击Footer重新请求数据; 6. 可以动态为FooterView赋予不同状态(加载中、加载失败、滑到最底等); -7. SwipeMenu系列功能,包括Item侧滑菜单、长按拖拽Item,滑动删除Item等; -8. 实现viewpager的功能。
注意:EndlessLinearLayoutActivity.java类里面有标准完整的使用方法,请尽量在这个界面看效果。 @@ -316,7 +314,7 @@ mRecyclerView.setLScrollListener(LScrollListener); RecyclerViewUtils.setFooterView(mRecyclerView, new SampleFooter(this)); ``` -2.不要SwipeRefreshLayout与LRecyclerView一起使用,会有冲突,如果你实在想用,请参考 +2.不要SwipeRefreshLayout与LRecyclerView一起使用,会有冲突,如果你实在想用,请参考SwipeRefreshLayoutActivity类的实现。 ##Thanks From 862b53995cd1fab536a4c446ff4d31f62e858e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E5=8F=B6=E9=A3=98=E8=88=9F?= Date: Mon, 19 Sep 2016 19:09:08 +0800 Subject: [PATCH 3/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4f4060f..c7569c0 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ allprojects { Step 2. 在你的model的build.gradle文件中增加LRecyclerView依赖。 ``` -compile 'com.github.jdsjlzx:LRecyclerView:1.1.0' +compile 'com.github.jdsjlzx:LRecyclerView:1.2.0' ``` LRecyclerView requires at minimum Java 7 or Android 4.0.