Skip to content

Commit

Permalink
fix: pos 获取为 -1 的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
limuyang2 committed May 29, 2023
1 parent 7948978 commit eca249f
Show file tree
Hide file tree
Showing 8 changed files with 54 additions and 46 deletions.
14 changes: 7 additions & 7 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
id 'com.google.devtools.ksp'
}

android {
Expand All @@ -28,12 +29,11 @@ android {
}

compileOptions {
// kotlinOptions.freeCompilerArgs += ["-Xjvm-default=all"]
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "11"
jvmTarget = "17"
}

buildFeatures {
Expand All @@ -49,14 +49,14 @@ dependencies {
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation "androidx.core:core-ktx:1.9.0"
implementation "androidx.core:core-ktx:1.10.1"

implementation 'com.kyleduo.switchbutton:library:2.0.0'
implementation 'com.kyleduo.switchbutton:library:2.1.0'
implementation 'androidx.recyclerview:recyclerview:1.3.0'
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"

implementation("com.squareup.moshi:moshi:1.14.0")
kapt("com.squareup.moshi:moshi-kotlin-codegen:1.14.0")
ksp("com.squareup.moshi:moshi-kotlin-codegen:1.14.0")

implementation 'com.jaredrummler:material-spinner:1.3.1'
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ class ItemClickActivity : BaseViewBindingActivity<ActivityUniversalRecyclerBindi
}
adapter.addOnItemChildClickListener(R.id.iv_num_add) { adapter, view, position ->
Tips.show("onItemChildClick: add $position")
adapter.removeAt(position)
}

// 设置子 view 长按事件
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public ItemChildLongClickVH(@NonNull ViewGroup parent) {
public ItemClickAdapter(List<ClickEntity> data) {
super(data);

addItemType(ClickEntity.CLICK_ITEM_VIEW, ItemViewVH.class, new OnMultiItemAdapterListener<ClickEntity, ItemViewVH>() {
addItemType(ClickEntity.CLICK_ITEM_VIEW, new OnMultiItemAdapterListener<ClickEntity, ItemViewVH>() {

@NonNull
@Override
Expand All @@ -94,7 +94,14 @@ public ItemViewVH onCreate(@NonNull Context context, @NonNull ViewGroup parent,
@Override
public void onBind(@NonNull ItemViewVH holder, int position, ClickEntity item) {
}
}).addItemType(ClickEntity.CLICK_ITEM_CHILD_VIEW, ItemChildVH.class, new OnMultiItemAdapterListener<ClickEntity, ItemChildVH>() {

@Override
public void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) {
if (holder instanceof ItemViewVH) {
System.out.println("---------------------- >> onViewDetachedFromWindow ItemViewVH");
}
}
}).addItemType(ClickEntity.CLICK_ITEM_CHILD_VIEW, new OnMultiItemAdapterListener<ClickEntity, ItemChildVH>() {

@NonNull
@Override
Expand All @@ -105,7 +112,7 @@ public ItemChildVH onCreate(@NonNull Context context, @NonNull ViewGroup parent,
@Override
public void onBind(@NonNull ItemChildVH holder, int position, ClickEntity item) {
}
}).addItemType(ClickEntity.LONG_CLICK_ITEM_VIEW, ItemLongClickVH.class, new OnMultiItemAdapterListener<ClickEntity, ItemLongClickVH>() {
}).addItemType(ClickEntity.LONG_CLICK_ITEM_VIEW, new OnMultiItemAdapterListener<ClickEntity, ItemLongClickVH>() {

@NonNull
@Override
Expand All @@ -116,7 +123,7 @@ public ItemLongClickVH onCreate(@NonNull Context context, @NonNull ViewGroup par
@Override
public void onBind(@NonNull ItemLongClickVH holder, int position, ClickEntity item) {
}
}).addItemType(ClickEntity.LONG_CLICK_ITEM_CHILD_VIEW, ItemChildLongClickVH.class, new OnMultiItemAdapterListener<ClickEntity, ItemChildLongClickVH>() {
}).addItemType(ClickEntity.LONG_CLICK_ITEM_CHILD_VIEW, new OnMultiItemAdapterListener<ClickEntity, ItemChildLongClickVH>() {

@NonNull
@Override
Expand All @@ -130,7 +137,6 @@ public void onBind(@NonNull ItemChildLongClickVH holder, int position, ClickEnti
}).onItemViewType(new OnItemViewTypeListener<ClickEntity>() {
@Override
public int onItemViewType(int position, @NonNull List<? extends ClickEntity> list) {
System.out.println("------------------------>> " + position);
return list.get(position).getItemType();
}
});
Expand Down
16 changes: 6 additions & 10 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
buildscript {
ext.kotlin_version = '1.8.21'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}"
}

plugins {
id 'com.android.application' version '8.0.1' apply false
id 'com.android.library' version '8.0.1' apply false
id 'org.jetbrains.kotlin.android' version '1.8.21' apply false
id 'com.google.devtools.ksp' version '1.8.21-1.0.11' apply false
}

task clean(type: Delete) {
Expand Down
6 changes: 3 additions & 3 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Sun Nov 14 15:55:02 CST 2021
#Mon May 29 14:19:55 CST 2023
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Context
import android.util.SparseArray
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.R
import java.lang.ref.WeakReference

/**
Expand All @@ -25,7 +26,9 @@ abstract class BaseMultiItemAdapter<T>(items: List<T> = emptyList()) :
val listener = typeViewHolders.get(viewType)
?: throw IllegalArgumentException("ViewType: $viewType not found onViewHolderListener,please use addItemType() first!")

return listener.onCreate(parent.context, parent, viewType)
return listener.onCreate(parent.context, parent, viewType).apply {
itemView.setTag(R.id.BaseQuickAdapter_key_multi, listener)
}
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int, item: T?) {
Expand All @@ -48,21 +51,17 @@ abstract class BaseMultiItemAdapter<T>(items: List<T> = emptyList()) :
/**
* Call this function to add multiTypeItems.
* 调用此方法,设置多布局
* @param type Int
* @param itemViewType Int
* @param listener Int
*/
inline fun <reified V : RecyclerView.ViewHolder> addItemType(
type: Int, listener: OnMultiItemAdapterListener<T, V>
) = addItemType(type, V::class.java, listener)

fun <V : RecyclerView.ViewHolder> addItemType(
type: Int, holderClazz: Class<V>, listener: OnMultiItemAdapterListener<T, V>
itemViewType: Int, listener: OnMultiItemAdapterListener<T, V>
) = apply {
if (listener is OnMultiItem) {
listener.weakA = WeakReference(this)
}
typeViewHolders.put(
type, listener as OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>
itemViewType, listener as OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>
)
}

Expand All @@ -83,28 +82,25 @@ abstract class BaseMultiItemAdapter<T>(items: List<T> = emptyList()) :
override fun onViewAttachedToWindow(holder: RecyclerView.ViewHolder) {
super.onViewAttachedToWindow(holder)

val realViewType = getItemViewType(holder.bindingAdapterPosition, items)
typeViewHolders.get(realViewType)?.onViewAttachedToWindow(holder)
(holder.itemView.getTag(R.id.BaseQuickAdapter_key_multi) as OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>)
.onViewAttachedToWindow(holder)
}

override fun onViewDetachedFromWindow(holder: RecyclerView.ViewHolder) {
super.onViewDetachedFromWindow(holder)

val realViewType = getItemViewType(holder.bindingAdapterPosition, items)
typeViewHolders.get(realViewType)?.onViewDetachedFromWindow(holder)
(holder.itemView.getTag(R.id.BaseQuickAdapter_key_multi) as OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>)
.onViewDetachedFromWindow(holder)
}

override fun onViewRecycled(holder: RecyclerView.ViewHolder) {
super.onViewRecycled(holder)

val realViewType = getItemViewType(holder.bindingAdapterPosition, items)
typeViewHolders.get(realViewType)?.onViewRecycled(holder)
(holder.itemView.getTag(R.id.BaseQuickAdapter_key_multi) as OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>)
.onViewRecycled(holder)
}

override fun onFailedToRecycleView(holder: RecyclerView.ViewHolder): Boolean {
val realViewType = getItemViewType(holder.bindingAdapterPosition, items)
return typeViewHolders.get(realViewType)?.onFailedToRecycleView(holder)
?: super.onFailedToRecycleView(holder)
return (holder.itemView.getTag(R.id.BaseQuickAdapter_key_multi) as OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>)
.onFailedToRecycleView(holder)
}

override fun isFullSpanItem(itemType: Int): Boolean {
Expand Down Expand Up @@ -144,7 +140,7 @@ abstract class BaseMultiItemAdapter<T>(items: List<T> = emptyList()) :
* @constructor Create empty On multi item
*/
abstract class OnMultiItem<T, V : RecyclerView.ViewHolder> : OnMultiItemAdapterListener<T, V> {
internal var weakA : WeakReference<BaseMultiItemAdapter<T>>? = null
internal var weakA: WeakReference<BaseMultiItemAdapter<T>>? = null

val adapter: BaseMultiItemAdapter<T>?
get() = weakA?.get()
Expand Down
2 changes: 2 additions & 0 deletions library/src/main/res/values/ids.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@
<item name="BaseQuickAdapter_swiping_support" type="id"/>
<item name="BaseQuickAdapter_dragging_support" type="id"/>
<item name="BaseQuickAdapter_databinding_support" type="id"/>

<item name="BaseQuickAdapter_key_multi" type="id"/>
</resources>
9 changes: 8 additions & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
jcenter() // Warning: this repository is going to shut down soon
}
}

Expand Down

0 comments on commit eca249f

Please sign in to comment.