diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fa02759e9..9053ce230 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -#Tue Feb 25 13:08:15 CST 2020 +#Thu Jun 11 10:01:00 CST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/library/build.gradle b/library/build.gradle index 7085b2ef1..5a575b032 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -42,4 +42,5 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0' } diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt index af030b61b..2137a6cba 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt @@ -26,12 +26,14 @@ import com.chad.library.adapter.base.listener.* import com.chad.library.adapter.base.module.* import com.chad.library.adapter.base.util.getItemView import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.jakewharton.rxbinding4.view.clicks import java.lang.ref.WeakReference import java.lang.reflect.Constructor import java.lang.reflect.InvocationTargetException import java.lang.reflect.Modifier import java.lang.reflect.ParameterizedType import java.util.* +import java.util.concurrent.TimeUnit import kotlin.collections.ArrayList /** @@ -173,6 +175,7 @@ abstract class BaseQuickAdapter private var mUpFetchModule: BaseUpFetchModule? = null private var mDraggableModule: BaseDraggableModule? = null internal var mLoadMoreModule: BaseLoadMoreModule? = null + private var throttleTime: Long = 1000 protected lateinit var context: Context private set @@ -523,20 +526,41 @@ abstract class BaseQuickAdapter } } + /** + * set a millisecond,itemClick or itemChildClick Execute only once in tTime millisecond + * + * 设置一个毫秒时间tTime ,是的在改时间诶点击事件只响应一次 + */ + fun addThrottleTime(@NonNull tTime: Long) { + throttleTime = tTime + } + /** * 绑定 item 点击事件 * @param viewHolder VH */ protected open fun bindViewClickListener(viewHolder: VH, viewType: Int) { mOnItemClickListener?.let { - viewHolder.itemView.setOnClickListener { v -> - var position = viewHolder.adapterPosition - if (position == RecyclerView.NO_POSITION) { - return@setOnClickListener - } - position -= headerLayoutCount - setOnItemClick(v, position) + with(viewHolder.itemView) { + clicks() + .throttleFirst(throttleTime, TimeUnit.MILLISECONDS) + .subscribe { + var position = viewHolder.adapterPosition + if (position == RecyclerView.NO_POSITION) { + return@subscribe + } + position -= headerLayoutCount + setOnItemClick(this, position) + } } +// viewHolder.itemView.setOnClickListener { v -> +// var position = viewHolder.adapterPosition +// if (position == RecyclerView.NO_POSITION) { +// return@setOnClickListener +// } +// position -= headerLayoutCount +// setOnItemClick(v, position) +// } } mOnItemLongClickListener?.let { viewHolder.itemView.setOnLongClickListener { v -> @@ -555,14 +579,25 @@ abstract class BaseQuickAdapter if (!childView.isClickable) { childView.isClickable = true } - childView.setOnClickListener { v -> - var position = viewHolder.adapterPosition - if (position == RecyclerView.NO_POSITION) { - return@setOnClickListener - } - position -= headerLayoutCount - setOnItemChildClick(v, position) - } + childView.clicks() + .throttleFirst(throttleTime, TimeUnit.MILLISECONDS) + .subscribe { + var position = viewHolder.adapterPosition + if (position == RecyclerView.NO_POSITION) { + return@subscribe + } + position -= headerLayoutCount + setOnItemChildClick(childView, position) + } + +// .setOnClickListener { v -> +// var position = viewHolder.adapterPosition +// if (position == RecyclerView.NO_POSITION) { +// return@setOnClickListener +// } +// position -= headerLayoutCount +// setOnItemChildClick(v, position) +// } } } }