Skip to content

Commit 486bb80

Browse files
Merge branch 'master' of github.com:DylanCaiCoding/ViewBindingKTX
2 parents 0172fa0 + f58abd4 commit 486bb80

File tree

8 files changed

+97
-34
lines changed

8 files changed

+97
-34
lines changed

app/src/main/java/com/dylanc/viewbinding/sample/HomeFragment.kt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ import android.os.Bundle
66
import android.view.View
77
import android.widget.Toast
88
import androidx.fragment.app.Fragment
9-
import com.dylanc.viewbinding.base.simpleListAdapter
9+
import com.dylanc.viewbinding.base.simpleStringListAdapter
1010
import com.dylanc.viewbinding.nonreflection.binding
1111
import com.dylanc.viewbinding.sample.databinding.FragmentHomeBinding
1212
import com.dylanc.viewbinding.sample.databinding.ItemFooBinding
13-
import com.dylanc.viewbinding.sample.item.Foo
14-
import com.dylanc.viewbinding.sample.item.FooDiffCallback
1513

1614
/**
1715
* @author Dylan Cai
@@ -20,21 +18,21 @@ class HomeFragment : Fragment(R.layout.fragment_home) {
2018

2119
private val binding by binding(FragmentHomeBinding::bind)
2220

23-
private val list = listOf(Foo("item 1"), Foo("item 2"), Foo("item 3"))
21+
private val list = listOf("item 1", "item 2", "item 3")
2422

2523
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
2624
super.onViewCreated(view, savedInstanceState)
2725
binding.recyclerView.adapter = adapter
2826
adapter.submitList(list)
2927
adapter.doOnItemClick { item, _ ->
30-
Toast.makeText(requireContext(), item.value, Toast.LENGTH_SHORT).show()
28+
Toast.makeText(requireContext(), item, Toast.LENGTH_SHORT).show()
3129
}
3230
adapter.doOnItemLongClick { item, _ ->
33-
Toast.makeText(requireContext(), "long click ${item.value}", Toast.LENGTH_SHORT).show()
31+
Toast.makeText(requireContext(), "long click $item", Toast.LENGTH_SHORT).show()
3432
}
3533
}
3634

37-
private val adapter = simpleListAdapter<Foo, ItemFooBinding>(FooDiffCallback()) { item ->
38-
tvFoo.text = item.value
35+
private val adapter = simpleStringListAdapter<ItemFooBinding> {
36+
textView.text = it
3937
}
4038
}

app/src/main/java/com/dylanc/viewbinding/sample/MainActivity.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ class MainActivity : AppCompatActivity() {
5454
},
5555
onTabUnselected = {
5656
textView.textSize = 14f
57-
}
58-
)
57+
})
5958
}
6059

6160
}

app/src/main/java/com/dylanc/viewbinding/sample/base/reflection/java/BindingViewDelegate.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ public BindingViewHolder<VB> onCreateViewHolder(@NotNull Context context, @NotNu
4141
return new BindingViewHolder<>(ViewBindingUtil.inflateWithGeneric(this, parent));
4242
}
4343

44+
@Override
45+
public void onBindViewHolder(@NonNull BindingViewHolder<VB> holder, T t) {
46+
onBindViewHolder(holder.getBinding(), t, holder.getAdapterPosition());
47+
}
48+
49+
abstract void onBindViewHolder(VB binding, T item, int position);
50+
4451
public static class BindingViewHolder<VB extends ViewBinding> extends RecyclerView.ViewHolder {
4552

4653
private final VB binding;

app/src/main/java/com/dylanc/viewbinding/sample/base/reflection/kotlin/BindingViewDelegate.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,11 @@ abstract class BindingViewDelegate<T, VB : ViewBinding> :
3232
override fun onCreateViewHolder(context: Context, parent: ViewGroup) =
3333
BindingViewHolder(ViewBindingUtil.inflateWithGeneric<VB>(this, parent))
3434

35+
override fun onBindViewHolder(holder: BindingViewHolder<VB>, item: T) {
36+
onBindViewHolder(holder.binding, item, holder.adapterPosition)
37+
}
38+
39+
abstract fun onBindViewHolder(holder: VB, item: T, position: Int)
40+
3541
class BindingViewHolder<VB : ViewBinding>(val binding: VB) : RecyclerView.ViewHolder(binding.root)
3642
}

app/src/main/java/com/dylanc/viewbinding/sample/item/FooAdapter.kt

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ import android.view.View
2020
import android.view.ViewGroup
2121
import com.chad.library.adapter.base.BaseQuickAdapter
2222
import com.chad.library.adapter.base.viewholder.BaseViewHolder
23-
import com.dylanc.viewbinding.brvah.getViewBinding
24-
import com.dylanc.viewbinding.brvah.withBinding
23+
import com.dylanc.viewbinding.brvah.getBinding
2524
import com.dylanc.viewbinding.sample.R
2625
import com.dylanc.viewbinding.sample.base.nonreflection.kotlin.BaseBindingQuickAdapter
2726
import com.dylanc.viewbinding.sample.databinding.ItemFooBinding
@@ -41,25 +40,20 @@ import com.dylanc.viewbinding.sample.databinding.ItemFooBinding
4140
// override fun getItemCount() = list.size
4241
//}
4342
//
44-
//class FooAdapter : BaseQuickAdapter<Foo, BaseViewHolder>(R.layout.item_foo) {
45-
//
46-
// override fun onCreateDefViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
47-
// return super.onCreateDefViewHolder(parent, viewType).withBinding { ItemFooBinding.bind(it) }
48-
// }
49-
//
50-
// override fun convert(holder: BaseViewHolder, item: Foo) {
51-
// holder.getViewBinding<ItemFooBinding>()
52-
// .apply {
53-
// tvFoo.text = item.value
54-
// }
55-
// }
56-
//}
43+
class FooAdapter : BaseQuickAdapter<Foo, BaseViewHolder>(R.layout.item_foo) {
5744

58-
class FooAdapter : BaseBindingQuickAdapter<Foo, ItemFooBinding>(ItemFooBinding::inflate) {
59-
60-
override fun convert(holder: BaseBindingHolder, item: Foo) {
61-
holder.getViewBinding<ItemFooBinding>().apply {
62-
tvFoo.text = item.value
45+
override fun convert(holder: BaseViewHolder, item: Foo) {
46+
holder.getBinding(ItemFooBinding::bind).apply {
47+
textView.text = item.value
6348
}
6449
}
65-
}
50+
}
51+
52+
//class FooAdapter : BaseBindingQuickAdapter<Foo, ItemFooBinding>(ItemFooBinding::inflate) {
53+
//
54+
// override fun convert(holder: BaseBindingHolder, item: Foo) {
55+
// holder.getViewBinding<ItemFooBinding>().apply {
56+
// tvFoo.text = item.value
57+
// }
58+
// }
59+
//}

app/src/main/java/com/dylanc/viewbinding/sample/item/FooViewDelegate.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class FooViewDelegate : ItemViewDelegate<Foo, BindingViewHolder<ItemFooBinding>>
2828
BindingViewHolder<ItemFooBinding>(parent)
2929

3030
override fun onBindViewHolder(holder: BindingViewHolder<ItemFooBinding>, item: Foo) {
31-
holder.binding.tvFoo.text = item.value
31+
holder.binding.textView.text = item.value
3232
}
3333
}
3434

app/src/main/res/layout/item_foo.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
4-
xmlns:tools="http://schemas.android.com/tools"
54
android:layout_width="match_parent"
65
android:layout_height="wrap_content">
76

87
<TextView
9-
android:id="@+id/tv_foo"
8+
android:id="@+id/text_view"
109
android:layout_width="wrap_content"
1110
android:layout_height="wrap_content"
1211
android:layout_marginTop="16dp"

viewbinding-base/src/main/java/com/dylanc/viewbinding/base/SimpleListAdapter.kt

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,24 @@ import androidx.recyclerview.widget.ListAdapter
2424
import androidx.recyclerview.widget.RecyclerView
2525
import androidx.viewbinding.ViewBinding
2626

27+
inline fun <VB : ViewBinding> simpleIntListAdapter(crossinline onBindViewHolder: VB.(Int) -> Unit) =
28+
simpleListAdapter(IntDiffCallback(), onBindViewHolder)
29+
30+
inline fun <VB : ViewBinding> simpleLongListAdapter(crossinline onBindViewHolder: VB.(Long) -> Unit) =
31+
simpleListAdapter(LongDiffCallback(), onBindViewHolder)
32+
33+
inline fun <VB : ViewBinding> simpleBooleanListAdapter(crossinline onBindViewHolder: VB.(Boolean) -> Unit) =
34+
simpleListAdapter(BooleanDiffCallback(), onBindViewHolder)
35+
36+
inline fun <VB : ViewBinding> simpleFloatListAdapter(crossinline onBindViewHolder: VB.(Float) -> Unit) =
37+
simpleListAdapter(FloatDiffCallback(), onBindViewHolder)
38+
39+
inline fun <VB : ViewBinding> simpleDoubleListAdapter(crossinline onBindViewHolder: VB.(Double) -> Unit) =
40+
simpleListAdapter(DoubleDiffCallback(), onBindViewHolder)
41+
42+
inline fun <VB : ViewBinding> simpleStringListAdapter(crossinline onBindViewHolder: VB.(String) -> Unit) =
43+
simpleListAdapter(StringDiffCallback(), onBindViewHolder)
44+
2745
inline fun <T, VB : ViewBinding> simpleListAdapter(
2846
diffCallback: DiffUtil.ItemCallback<T>,
2947
crossinline onBindViewHolder: VB.(T) -> Unit
@@ -68,3 +86,45 @@ abstract class SimpleListAdapter<T, VB : ViewBinding>(
6886

6987
class BindingViewHolder<VB : ViewBinding>(val binding: VB) : RecyclerView.ViewHolder(binding.root)
7088
}
89+
90+
abstract class SimpleIntListAdapter<VB : ViewBinding> : SimpleListAdapter<Int, VB>(IntDiffCallback())
91+
92+
abstract class SimpleLongListAdapter<VB : ViewBinding> : SimpleListAdapter<Long, VB>(LongDiffCallback())
93+
94+
abstract class SimpleBooleanListAdapter<VB : ViewBinding> : SimpleListAdapter<Boolean, VB>(BooleanDiffCallback())
95+
96+
abstract class SimpleFloatListAdapter<VB : ViewBinding> : SimpleListAdapter<Float, VB>(FloatDiffCallback())
97+
98+
abstract class SimpleDoubleListAdapter<VB : ViewBinding> : SimpleListAdapter<Double, VB>(DoubleDiffCallback())
99+
100+
abstract class SimpleStringListAdapter<VB : ViewBinding> : SimpleListAdapter<String, VB>(StringDiffCallback())
101+
102+
class IntDiffCallback : DiffUtil.ItemCallback<Int>() {
103+
override fun areItemsTheSame(oldItem: Int, newItem: Int) = oldItem == newItem
104+
override fun areContentsTheSame(oldItem: Int, newItem: Int) = oldItem == newItem
105+
}
106+
107+
class LongDiffCallback : DiffUtil.ItemCallback<Long>() {
108+
override fun areItemsTheSame(oldItem: Long, newItem: Long) = oldItem == newItem
109+
override fun areContentsTheSame(oldItem: Long, newItem: Long) = oldItem == newItem
110+
}
111+
112+
class BooleanDiffCallback : DiffUtil.ItemCallback<Boolean>() {
113+
override fun areItemsTheSame(oldItem: Boolean, newItem: Boolean) = oldItem == newItem
114+
override fun areContentsTheSame(oldItem: Boolean, newItem: Boolean) = oldItem == newItem
115+
}
116+
117+
class FloatDiffCallback : DiffUtil.ItemCallback<Float>() {
118+
override fun areItemsTheSame(oldItem: Float, newItem: Float) = oldItem == newItem
119+
override fun areContentsTheSame(oldItem: Float, newItem: Float) = oldItem == newItem
120+
}
121+
122+
class DoubleDiffCallback : DiffUtil.ItemCallback<Double>() {
123+
override fun areItemsTheSame(oldItem: Double, newItem: Double) = oldItem == newItem
124+
override fun areContentsTheSame(oldItem: Double, newItem: Double) = oldItem == newItem
125+
}
126+
127+
class StringDiffCallback : DiffUtil.ItemCallback<String>() {
128+
override fun areItemsTheSame(oldItem: String, newItem: String) = oldItem == newItem
129+
override fun areContentsTheSame(oldItem: String, newItem: String) = oldItem == newItem
130+
}

0 commit comments

Comments
 (0)