Skip to content

Commit

Permalink
#update Adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
wumeng1 authored and wumeng1 committed Jul 27, 2021
1 parent adb8145 commit a5f44c6
Show file tree
Hide file tree
Showing 13 changed files with 267 additions and 86 deletions.
10 changes: 10 additions & 0 deletions app/src/main/java/com/mirkowu/mvm/recycelerview/FirstBean.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.mirkowu.mvm.recycelerview;

import com.mirkowu.lib_widget.adapter.IMultiType;

public class FirstBean implements IMultiType {
@Override
public int getItemViewType() {
return GridAdapter.TYPE_FIRST;
}
}
10 changes: 10 additions & 0 deletions app/src/main/java/com/mirkowu/mvm/recycelerview/FourBean.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.mirkowu.mvm.recycelerview;

import com.mirkowu.lib_widget.adapter.IMultiType;

public class FourBean implements IMultiType {
@Override
public int getItemViewType() {
return GridAdapter.TYPE_FOUR;
}
}
73 changes: 60 additions & 13 deletions app/src/main/java/com/mirkowu/mvm/recycelerview/GridAdapter.kt
Original file line number Diff line number Diff line change
@@ -1,25 +1,72 @@
package com.mirkowu.mvm.recycelerview

import android.view.ViewGroup
import com.mirkowu.lib_widget.adapter.BaseRVAdapter
import android.view.View
import com.mirkowu.lib_image.ImageLoader
import com.mirkowu.lib_widget.adapter.BaseRVHolder
import com.mirkowu.mvm.databinding.ItemBindingListBinding
import com.mirkowu.lib_widget.adapter.IMultiType
import com.mirkowu.lib_widget.adapter.MultiTypeRVAdapter
import com.mirkowu.mvm.R

class GridAdapter : BaseRVAdapter<String, GridAdapter.Holder>() {
class Holder(val binding: ItemBindingListBinding) : BaseRVHolder(binding.root) {
class GridAdapter : MultiTypeRVAdapter<IMultiType, GridAdapter.Holder> {


companion object {
const val TYPE_FIRST = 1
const val TYPE_SECOND = 2
const val TYPE_THIRD = 3
const val TYPE_FOUR = 4
}

override fun onCreateHolder(parent: ViewGroup, viewType: Int): Holder {
return Holder(ItemBindingListBinding.inflate(mLayoutInflater, parent, false))
constructor() : super() {
addItemViewType(TYPE_FIRST, R.layout.item_first)
addItemViewType(TYPE_SECOND, R.layout.item_second)
addItemViewType(TYPE_THIRD, R.layout.item_binding_list)
addItemViewType(TYPE_FOUR, R.layout.item_binding_list)
}

override fun onBindHolder(holder: Holder, item: String?, position: Int) {
holder.binding.apply {
tvTitle.text = "${position}XXXXXXXXXX"
tvContent.text = "内容${position}"
addOnClickListener(holder,tvTitle)
addOnClickListener(holder,tvContent)
override fun onBindHolder(holder: GridAdapter.Holder, item: IMultiType?, position: Int) {
if (item == null) return
when (item) {
is FirstBean -> {
bindHolderFirst(holder, item, position)
}
is SecondBean -> {
bindHolderSecond(holder, item, position)
}
is ThirdBean -> {
bindHolderThird(holder, item, position)
}
}

// holder.binding.apply {
// tvTitle.text = "第${position}XXXXXXXXXX"
// tvContent.text = "内容${position}"
// addOnClickListener(holder, tvTitle)
// addOnClickListener(holder, tvContent)
// }
}

private fun bindHolderFirst(holder: BaseRVHolder, item: FirstBean, position: Int) {
holder.setText(R.id.tv_title, "第一张类型")

}

private fun bindHolderSecond(holder: BaseRVHolder, item: SecondBean, position: Int) {

ImageLoader.load(holder.getView(R.id.iv_image), R.mipmap.ic_launcher)
}

private fun bindHolderThird(holder: BaseRVHolder, item: ThirdBean, position: Int) {
holder.setText(R.id.tv_title, "标题")
holder.setText(R.id.tv_content, "内容")

}

// class Holder(val binding: ItemBindingListBinding) : BaseRVHolder(binding.root) {
//
// }
class Holder(val view: View) : BaseRVHolder(view) {

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.mirkowu.lib_base.mediator.EmptyMediator
import com.mirkowu.lib_base.util.bindingView
import com.mirkowu.lib_util.LogUtil
import com.mirkowu.lib_widget.adapter.IMultiType
import com.mirkowu.lib_widget.decoration.LinearDecoration
import com.mirkowu.mvm.R
import com.mirkowu.mvm.base.BaseActivity
Expand All @@ -32,25 +33,45 @@ class GridListActivity : BaseActivity<EmptyMediator>() {

override fun initialize() {

val list = mutableListOf("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
val list = mutableListOf<IMultiType>()
for (index in 0 until 40) {
if (index % 2 == 0) {
list.add(SecondBean())
} else if (index % 3 == 0) {
list.add(ThirdBean())
} else {
list.add(FirstBean())
list.add(FourBean())
}
}
val gridAdapter = GridAdapter()
binding.rvGrid.apply {
layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
adapter = gridAdapter
addItemDecoration(LinearDecoration(context).setSpace(10f)/*.setEdgeSpace(10f)*/.setTopSpace(20f).setBottomSpace(50f).setSpaceColor(Color.parseColor("#90FF0000")))
addItemDecoration(
LinearDecoration(context).setSpace(10f)/*.setEdgeSpace(10f)*/.setTopSpace(20f)
.setBottomSpace(50f).setSpaceColor(Color.parseColor("#90FF0000"))
)
}
gridAdapter.data = list
gridAdapter.setOnItemChildClickListener { view, item, position ->
when (view.id) {
R.id.tv_title -> {
gridAdapter.removeData(position)
} R.id.tv_content -> {
gridAdapter.addData(1,"A")
}
R.id.tv_content -> {
// gridAdapter.addData(1, "A")
}
}
}
gridAdapter.setOnItemClickListener { view, item, position ->
LogUtil.d("setOnItemClickListener: position=$position item=$item item=${gridAdapter.getItem(position)}")
LogUtil.d(
"setOnItemClickListener: position=$position item=$item item=${
gridAdapter.getItem(
position
)
}"
)
}
}
}
10 changes: 10 additions & 0 deletions app/src/main/java/com/mirkowu/mvm/recycelerview/SecondBean.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.mirkowu.mvm.recycelerview;

import com.mirkowu.lib_widget.adapter.IMultiType;

public class SecondBean implements IMultiType {
@Override
public int getItemViewType() {
return GridAdapter.TYPE_SECOND;
}
}
10 changes: 10 additions & 0 deletions app/src/main/java/com/mirkowu/mvm/recycelerview/ThirdBean.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.mirkowu.mvm.recycelerview;

import com.mirkowu.lib_widget.adapter.IMultiType;

public class ThirdBean implements IMultiType {
@Override
public int getItemViewType() {
return GridAdapter.TYPE_THIRD;
}
}
10 changes: 10 additions & 0 deletions app/src/main/res/layout/item_first.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="40dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
10 changes: 10 additions & 0 deletions app/src/main/res/layout/item_second.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<ImageView
android:id="@+id/iv_image"
android:layout_width="match_parent"
android:layout_height="200dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public static void setLoader(ILoader loader) {
*
* @return
*/
@NonNull
public static ILoader getLoader() {
if (sILoader == null) {
synchronized (ImageLoader.class) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,17 @@
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.IdRes;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.mirkowu.lib_widget.R;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

Expand Down Expand Up @@ -211,69 +215,69 @@ public void onBindViewHolder(@NonNull VH holder, int position) {
// protected VH createBaseRVHolder(@NonNull ViewGroup parent, @LayoutRes int layoutResId) {
// return this.createBaseRVHolder(getHolderView(parent, layoutResId));
// }
//
// protected VH createBaseRVHolder(View view) {
// Class temp = this.getClass();
//
// Class z;
// for (z = null; z == null && null != temp; temp = temp.getSuperclass()) {
// z = this.getInstancedGenericKClass(temp);
// }
//
// VH k;
// if (z == null) {
// k = (VH) new BaseRVHolder(view);
// } else {
// k = this.createGenericKInstance(z, view);
// }
//
// return k != null ? k : (VH) new BaseRVHolder(view);
// }
//
// private VH createGenericKInstance(Class z, View view) {
// try {
// Constructor constructor;
// if (z.isMemberClass() && !Modifier.isStatic(z.getModifiers())) {
// constructor = z.getDeclaredConstructor(this.getClass(), View.class);
// constructor.setAccessible(true);
// return (VH) constructor.newInstance(this, view);
// }
//
// constructor = z.getDeclaredConstructor(View.class);
// constructor.setAccessible(true);
// return (VH) constructor.newInstance(view);
// } catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException var4) {
// var4.printStackTrace();
// }
//
// return null;
// }
//
// private Class getInstancedGenericKClass(Class z) {
// Type type = z.getGenericSuperclass();
// if (type instanceof ParameterizedType) {
// Type[] types = ((ParameterizedType) type).getActualTypeArguments();
// Type[] var4 = types;
// int var5 = types.length;
//
// for (int var6 = 0; var6 < var5; ++var6) {
// Type temp = var4[var6];
// if (temp instanceof Class) {
// Class tempClass = (Class) temp;
// if (BaseRVHolder.class.isAssignableFrom(tempClass)) {
// return tempClass;
// }
// } else if (temp instanceof ParameterizedType) {
// Type rawType = ((ParameterizedType) temp).getRawType();
// if (rawType instanceof Class && BaseRVHolder.class.isAssignableFrom((Class) rawType)) {
// return (Class) rawType;
// }
// }
// }
// }
//
// return null;
// }

protected VH createBaseRVHolder(View view) {
Class temp = this.getClass();

Class z;
for (z = null; z == null && null != temp; temp = temp.getSuperclass()) {
z = this.getInstancedGenericKClass(temp);
}

VH k;
if (z == null) {
k = (VH) new BaseRVHolder(view);
} else {
k = this.createGenericKInstance(z, view);
}

return k != null ? k : (VH) new BaseRVHolder(view);
}

private VH createGenericKInstance(Class z, View view) {
try {
Constructor constructor;
if (z.isMemberClass() && !Modifier.isStatic(z.getModifiers())) {
constructor = z.getDeclaredConstructor(this.getClass(), View.class);
constructor.setAccessible(true);
return (VH) constructor.newInstance(this, view);
}

constructor = z.getDeclaredConstructor(View.class);
constructor.setAccessible(true);
return (VH) constructor.newInstance(view);
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException var4) {
var4.printStackTrace();
}

return null;
}

private Class getInstancedGenericKClass(Class z) {
Type type = z.getGenericSuperclass();
if (type instanceof ParameterizedType) {
Type[] types = ((ParameterizedType) type).getActualTypeArguments();
Type[] var4 = types;
int var5 = types.length;

for (int var6 = 0; var6 < var5; ++var6) {
Type temp = var4[var6];
if (temp instanceof Class) {
Class tempClass = (Class) temp;
if (BaseRVHolder.class.isAssignableFrom(tempClass)) {
return tempClass;
}
} else if (temp instanceof ParameterizedType) {
Type rawType = ((ParameterizedType) temp).getRawType();
if (rawType instanceof Class && BaseRVHolder.class.isAssignableFrom((Class) rawType)) {
return (Class) rawType;
}
}
}
}

return null;
}

/**
* Item添加点击事件
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.mirkowu.lib_widget.adapter;

/**
* 需要做多类型Item的接口
*/
public interface IMultiType {
int getItemViewType();
}
Loading

0 comments on commit a5f44c6

Please sign in to comment.