All Projects → goyourfly → Multiselectadapter

goyourfly / Multiselectadapter

MultiSelectAdapter可以让你的Adapter快速实现多选和批量操作

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Multiselectadapter

Slimadapter
A slim & clean & typeable Adapter without# VIEWHOLDER
Stars: ✭ 939 (+381.54%)
Mutual labels:  adapter, recyclerview
Easyadapter
This project demonstrates simple approach for implementation complex lists, based on RecyclerView.
Stars: ✭ 187 (-4.1%)
Mutual labels:  adapter, recyclerview
Candyview
Implement any RecyclerView in just 1 Line. CandyView handles everything for you.
Stars: ✭ 15 (-92.31%)
Mutual labels:  adapter, recyclerview
Sherlockadapter
一个万能的封装了RecyclerView.Adapter的功能库。
Stars: ✭ 186 (-4.62%)
Mutual labels:  adapter, recyclerview
Sectionedrecyclerviewadapter
An Adapter that allows a RecyclerView to be split into Sections with headers and/or footers. Each Section can have its state controlled individually.
Stars: ✭ 1,659 (+750.77%)
Mutual labels:  adapter, recyclerview
Superadapter
[Deprecated]. 🚀 Adapter(BaseAdapter, RecyclerView.Adapter) wrapper for Android. 一个Adapter同时适用RecyclerView、ListView、GridView等。
Stars: ✭ 638 (+227.18%)
Mutual labels:  adapter, recyclerview
Flagchatadapter
FlagChatAdapter is easy to implement enchanting recycler view adapter. Just extend your adapter with FlagChatAdapter, impliment some methods and voila! You have got the most beautiful looking chat on your phone. Zero boilerplate code, just put your variables in the right direction.
Stars: ✭ 39 (-80%)
Mutual labels:  adapter, recyclerview
Fastadapter
The bullet proof, fast and easy to use adapter library, which minimizes developing time to a fraction...
Stars: ✭ 3,512 (+1701.03%)
Mutual labels:  adapter, recyclerview
Poweradapter
Adapter for RecyclerView(only 21KB).RecyclerView万能适配器(仅21KB)
Stars: ✭ 112 (-42.56%)
Mutual labels:  adapter, recyclerview
Recyclerviewpresenter
RecyclerView Adapter Library with different models and different layouts as convenient as possible.
Stars: ✭ 86 (-55.9%)
Mutual labels:  adapter, recyclerview
Multiitem
一个优雅的实现多类型的RecyclerView类库 支持DataBinding Form表单录入 跨多个RecyclerView拖动
Stars: ✭ 381 (+95.38%)
Mutual labels:  adapter, recyclerview
Recyclerviewadapter
A RecyclerView Adapter that support load more and add headerview
Stars: ✭ 141 (-27.69%)
Mutual labels:  adapter, recyclerview
Adapter
A quick adapter library for RecyclerView, GridView, ListView, ViewPager, Spinner
Stars: ✭ 376 (+92.82%)
Mutual labels:  adapter, recyclerview
Multityperecyclerviewadapter
一个专注于RecyclerView优雅刷新(接管资源和数据源)、高灵活、低耦合、健壮性以及高效性的MVP模式库,支持大多数Adapter
Stars: ✭ 763 (+291.28%)
Mutual labels:  adapter, recyclerview
Flexibleadapter
Fast and versatile Adapter for RecyclerView which regroups several features into one library to considerably improve the user experience :-)
Stars: ✭ 3,482 (+1685.64%)
Mutual labels:  adapter, recyclerview
Google Books Android Viewer
Android library to bridge between RecyclerView and sources like web page or database. Includes demonstrator (Google Books viewer)
Stars: ✭ 37 (-81.03%)
Mutual labels:  adapter, recyclerview
Boardview
A draggable boardview for java android (Kanban style)
Stars: ✭ 309 (+58.46%)
Mutual labels:  adapter, recyclerview
Oneadapter
A Viewholderless Adapter for RecyclerView, who supports builtin diffing, states (paging, empty...), events (clicking, swiping...), and more.
Stars: ✭ 321 (+64.62%)
Mutual labels:  adapter, multiselect
Grouprecyclerviewadapter
可增删改查、可动画展开收起、可吸附悬浮动态可配置的分组列表
Stars: ✭ 41 (-78.97%)
Mutual labels:  adapter, recyclerview
Kotlin Adapter
🔥 RecyclerView,AbsListView适配器, 支持多种视图样式, 支持吸顶、侧滑删除、拖拽效果
Stars: ✭ 132 (-32.31%)
Mutual labels:  adapter, recyclerview

MultiSelectAdapter

MultiSelectAdapter是一个为RecyclerView设计的Adapter,它可以在不修改你原有Adapter的前提下让你的RecycleView支持多选和批量操作

Demo

Demo0 Demo1 Demo2 Demo3
Demo0 Demo4 Demo5 Demo6

Compile

Step 1. Add it in your root build.gradle at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Step 2. Add the dependency

dependencies {
    compile 'com.github.goyourfly:MultiSelectAdapter:lastVersion'
}

Usage

 MultipleAdapter adapter = MultipleSelect
                .with(Activity)
                .adapter(YourAdapter)
                .ignoreViewType(ItemViewType)
                .linkList(YourAdapter.list)
                .stateChangeListener(StateChangeListener)
                .decorateFactory(? extends DecorateFactory)
                .customMenu(? extends MenuBar)
                .build();
方法名 形参 是否必须 说明
with Activity 显示RecycleView的Activity
adapter RecyclerView.Adapter 你的Adapter
ignoreViewType Integer[] 需要忽略的Item类型,比如Section,Header,Footer等
linkList List 绑定你的Adapter的地址,这样在调用MultipleAdapter.delete()接口的时候就会自动删除数据
stateChangeListener StateChangeListener 选择模式时候的一些消息回调
decorateFactory ? extends DecorateFactory 选择模式时Item的样式创建类,可以自定义,具体样式参考上面Demo,底下会详细介绍
customMenu ? extends MenuBar 选择模式的Menu,默认提供几种方式,可以简单的自定义和完全的自定义

StateChangeListener

/**
 * Kotlin
 * 一些操作的回调
 */
open class SimpleStateChangeListener:StateChangeListener{
    override fun onSelectMode() {

    }

    override fun onSelect(position: Int, selectNum: Int) {

    }

    override fun onUnSelect(position: Int, selectNum: Int) {

    }

    override fun onDone(array: ArrayList<Int>) {

    }

    override fun onDelete(array: ArrayList<Int>) {

    }

    override fun onCancel() {

    }

}

DecorateFactory

DecorateFactory定义了在多选模式下Item的样式,如下第一个是正常模式的显示状态,第二个是多选模式下的显示样式(其中的一种样式)

RadioButtonStyle RadioButtonStyle

目前内置四种样式的DecorateFactory,分别是

类名 构造方法参数 说明 Demo
RadioBtnFactory color:Int(RadioBtn颜色), duration:Long(动画时长), gravity:Int(位置,Gravity.LEFT,Gravity.RIGHT) 在Item外面的左侧或者右侧显示RadioButton RadioButtonStyle
CheckBoxFactory color:Int(颜色), duration:Long(动画时长), gravity:Int(位置,Gravity),marginDp:Int,边距 在Item内部的左侧或者右侧显示RadioButton, CheckBoxStyle
ColorFactory targetViewId:Int(改变颜色的View ID),defaultColor:Int,普通状态下的颜色,selectColor:Int选中状态下的颜色 选中和未选中的时候,修改某一个View的背景色 ColorStyle
DrawableFactory
当然,你也可以实现自己的风格如下:
class YourCustomFactory(val color: Int = Color.RED,
                      val gravity: Int = Gravity.RIGHT,
                      val marginDp:Int = 8) : CustomViewFactory() {
    // 显示时候的动画,如果不加动画,则直接将selectView置为View.VISIBLE
    override fun onShowAnimation(itemView: View, selectView: View) {
        selectView.visibility = View.VISIBLE
    }

    // 隐藏时候的动画,如果不加动画,则直接将selectView置为View.GONE
    override fun onHideAnimation(itemView: View, selectView: View) {
        selectView.visibility = View.GONE
    }

	// 创建选中时显示的View
    override fun onCreateSelectView(context:Context): View {
        val imageView = ImageView(context)
        imageView.setImageResource(R.drawable.ic_check_box_black_24dp)
        imageView.setColorFilter(color)
        return imageView
    }
	// 创建未选中时的View
    override fun onCreateNormalView(context:Context): View {
        val imageView = ImageView(context)
        imageView.setColorFilter(color)
        imageView.setImageResource(R.drawable.ic_check_box_outline_blank_black_24dp)
        return imageView
    }

	// 创建View的容器,该容器包含了用户的ItemView和你定义的选中时的View
    override fun onCreateRootView(context:Context): ViewGroup {
        return FrameLayout(context)
    }

	// 设置ItemView和SelectView的位置关系
	// ItemView:用户创建的ItemView
	// SelectView:选中状态View
    override fun onBindSelectView(root: ViewGroup, itemView: View, selectView: View) {
        root.removeAllViews()
        root.addView(itemView)
        val params = FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT)
        params.gravity = gravity
        params.leftMargin = marginDp.toPx(root.context)
        params.topMargin = marginDp.toPx(root.context)
        params.rightMargin = marginDp.toPx(root.context)
        params.bottomMargin = marginDp.toPx(root.context)
        root.addView(selectView, params)
    }

}

MenuBar

MenuBar

内置四种MenuBar的样式,具体样式请看Demo

  • SimpleDeleteMenuBar
  • SimpleDoneMenuBar
  • SimpleDoneAndDeleteMenuBar
  • SimpleDeleteSelectAllMenuBar

你也可以通过继承CustomMenuBar来实现一个自己的MenuBar:

class MyMenuBar(activity:Activity,menuId:Int,color:Int)
        :CustomMenuBar(activity,menuId,color,Gravity.TOP){

    override fun onUpdateTitle(selectCount: Int, total: Int) {
        toolbar.title = "选中:$selectCount 总共:$total"
    }

    override fun onMenuItemClick(menuItem: MenuItem, controller: MenuController) {
        //TODO 这里处理点击事件
    }
}

详细的使用可以看这里:Code

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].