Skip to content

Commit 4e45fa3

Browse files
Prepare for release 2.0.0
1 parent 83a27bb commit 4e45fa3

File tree

14 files changed

+168
-518
lines changed

14 files changed

+168
-518
lines changed

README.md

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ English | [中文](https://github.com/DylanCaiCoding/ViewBindingKtx/blob/master/
1515
- Support for Activity, Fragment, Dialog, Adapter
1616
- Support automatic release of binding class instance in Fragment
1717
- Support for custom combination view
18+
- Support for create PopupWindow
1819
- Support for TabLayout to set custom view
1920
- Support for NavigationView to set header view
2021
- Support for DataBinding to automatically set the lifecycle owner
@@ -42,10 +43,10 @@ android {
4243
4344
dependencies {
4445
// The following are optional, please add as needed
45-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-ktx:1.2.6'
46-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:1.2.6'
47-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:1.2.6'
48-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-brvah:1.2.6'
46+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-ktx:2.0.0'
47+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:2.0.0'
48+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:2.0.0'
49+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-brvah:2.0.0'
4950
}
5051
```
5152

@@ -108,28 +109,13 @@ class HomeFragment: BaseBindingFragment<FragmentHomeBinding>() {
108109
}
109110
```
110111

111-
Use multiple ways to compatible [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)
112+
Use in [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)
112113

113114
```kotlin
114115
class FooAdapter : BaseQuickAdapter<Foo, BaseViewHolder>(R.layout.item_foo) {
115116

116-
override fun onCreateDefViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
117-
return super.onCreateDefViewHolder(parent, viewType).withBinding { ItemFooBinding.bind(it) }
118-
}
119-
120117
override fun convert(holder: BaseViewHolder, item: Foo) {
121-
holder.getViewBinding<ItemFooBinding>().apply {
122-
tvFoo.text = item.value
123-
}
124-
}
125-
}
126-
```
127-
128-
```kotlin
129-
class FooAdapter : BaseBindingQuickAdapter<Foo, ItemFooBinding>() {
130-
131-
override fun convert(holder: BaseBindingHolder<ItemFooBinding>, item: Foo) {
132-
holder.getViewBinding<ItemFooBinding>().apply {
118+
holder.getBinding(ItemFooBinding::bind).apply {
133119
tvFoo.text = item.value
134120
}
135121
}
@@ -138,8 +124,6 @@ class FooAdapter : BaseBindingQuickAdapter<Foo, ItemFooBinding>() {
138124

139125
See the [usage documentation](https://dylancaicoding.github.io/ViewBindingKTX) for more usage.
140126

141-
##
142-
143127
## Change log
144128

145129
[Releases](https://github.com/DylanCaiCoding/ViewBindingKTX/releases)

README_CN.md

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
- 支持 Activity、Fragment、Dialog、Adapter
1616
- 支持在 Fragment 自动释放绑定类的实例对象
1717
- 支持实现自定义组合控件
18+
- 支持创建 PopupWindow
1819
- 支持 TabLayout 实现自定义标签布局
1920
- 支持 NavigationView 设置头部控件
2021
- 支持 DataBinding 自动设置 lifecycleOwner
@@ -43,10 +44,10 @@ android {
4344
4445
dependencies {
4546
// 以下都是可选,请根据需要进行添加
46-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-ktx:1.2.6'
47-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:1.2.6'
48-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:1.2.6'
49-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-brvah:1.2.6'
47+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-ktx:2.0.0'
48+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:2.0.0'
49+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:2.0.0'
50+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-brvah:2.0.0'
5051
}
5152
```
5253

@@ -109,28 +110,13 @@ class HomeFragment: BaseBindingFragment<FragmentHomeBinding>() {
109110
}
110111
```
111112

112-
提供多种方式兼容 [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)
113+
适配了 [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)
113114

114115
```kotlin
115116
class FooAdapter : BaseQuickAdapter<Foo, BaseViewHolder>(R.layout.item_foo) {
116117

117-
override fun onCreateDefViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
118-
return super.onCreateDefViewHolder(parent, viewType).withBinding { ItemFooBinding.bind(it) }
119-
}
120-
121118
override fun convert(holder: BaseViewHolder, item: Foo) {
122-
holder.getViewBinding<ItemFooBinding>().apply {
123-
tvFoo.text = item.value
124-
}
125-
}
126-
}
127-
```
128-
129-
```kotlin
130-
class FooAdapter : BaseBindingQuickAdapter<Foo, ItemFooBinding>() {
131-
132-
override fun convert(holder: BaseBindingHolder<ItemFooBinding>, item: Foo) {
133-
holder.getViewBinding<ItemFooBinding>().apply {
119+
holder.getBinding(ItemFooBinding::bind).apply {
134120
tvFoo.text = item.value
135121
}
136122
}

docs/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
- 支持 Activity、Fragment、Dialog、Adapter
1616
- 支持在 Fragment 自动释放绑定类的实例对象
1717
- 支持实现自定义组合控件
18+
- 支持创建 PopupWindow
1819
- 支持 TabLayout 实现自定义标签布局
1920
- 支持 NavigationView 设置头部控件
2021
- 支持 DataBinding 自动设置 lifecycleOwner
@@ -43,10 +44,10 @@ android {
4344
4445
dependencies {
4546
// 以下都是可选,请根据需要进行添加
46-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-ktx:1.2.6'
47-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:1.2.6'
48-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:1.2.6'
49-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-brvah:1.2.6'
47+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-ktx:2.0.0'
48+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:2.0.0'
49+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:2.0.0'
50+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-brvah:2.0.0'
5051
}
5152
```
5253

@@ -57,7 +58,6 @@ dependencies {
5758
| [Longan](https://github.com/DylanCaiCoding/Longan) | 简化 Android 开发的 Kotlin 工具类集合 |
5859
| [LoadingStateView](https://github.com/DylanCaiCoding/LoadingStateView) | 深度解耦标题栏或加载中、加载失败、无数据等视图 |
5960
| [MMKV-KTX](https://github.com/DylanCaiCoding/MMKV-KTX) | 用属性委托的方式使用 MMKV |
60-
| [ActivityResultLauncher](https://github.com/DylanCaiCoding/ActivityResultLauncher) | 优雅地替代 `startActivityForResult()` |
6161

6262
## License
6363

docs/cn/java/baseclass.md

Lines changed: 21 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
添加依赖:
1212

1313
```gradle
14-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:1.2.6'
14+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:2.0.0'
1515
```
1616

1717
改造的核心步骤:
@@ -99,67 +99,7 @@ class HomeFragment extends BaseBindingFragment<FragmentHomeBinding> {
9999

100100
### Adapter
101101

102-
下面提供两个适配器开源库的封装改造示例,如果你有在用这两个库,可以直接拷贝去用。如果是自己封装的适配器基类,可参考下面封装的思路进行改造。
103-
104-
- #### [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)
105-
106-
封装基类代码:
107-
108-
```java
109-
public abstract class BaseBindingQuickAdapter<T, VB extends ViewBinding>
110-
extends BaseQuickAdapter<T, BaseBindingQuickAdapter.BaseBindingHolder> {
111-
112-
public BaseBindingQuickAdapter() {
113-
this(-1);
114-
}
115-
116-
public BaseBindingQuickAdapter(@LayoutRes int layoutResId) {
117-
super(layoutResId);
118-
}
119-
120-
@NotNull
121-
@Override
122-
protected BaseBindingHolder onCreateDefViewHolder(@NotNull ViewGroup parent, int viewType) {
123-
VB viewBinding = ViewBindingUtil.inflateWithGeneric(this, parent);
124-
return new BaseBindingHolder(viewBinding);
125-
}
126-
127-
public static class BaseBindingHolder extends BaseViewHolder {
128-
129-
private final ViewBinding binding;
130-
131-
public BaseBindingHolder(@NotNull View view) {
132-
this(() -> view);
133-
}
134-
135-
public BaseBindingHolder(@NotNull ViewBinding binding) {
136-
super(binding.getRoot());
137-
this.binding = binding;
138-
}
139-
140-
@NonNull
141-
@SuppressWarnings("unchecked")
142-
public <VB extends ViewBinding> VB getViewBinding() {
143-
return (VB) binding;
144-
}
145-
}
146-
}
147-
```
148-
149-
封装后的使用示例:
150-
151-
```java
152-
class FooAdapter extends BaseBindingQuickAdapter<Foo, ItemFooBinding> {
153-
154-
@Override
155-
public void convert(@NotNull BindingViewHolder<ItemFooBinding> holder, Foo item) {
156-
ItemFooBinding binding = holder.getViewBinding();
157-
binding.tvFoo.setText(item.getValue());
158-
}
159-
}
160-
```
161-
162-
- #### [MultiType](https://github.com/drakeet/MultiType)
102+
下面是第三方适配器库 [MultiType](https://github.com/drakeet/MultiType) 的封装示例,如果是自己封装的适配器基类,可参考下面的封装思路进行改造。
163103

164104
封装基类代码:
165105

@@ -172,6 +112,13 @@ public abstract class BindingViewDelegate<T, VB extends ViewBinding> extends
172112
return new BindingViewHolder<>(ViewBindingUtil.inflateWithGeneric(this, parent));
173113
}
174114

115+
@Override
116+
public void onBindViewHolder(@NonNull BindingViewHolder<VB> holder, T t) {
117+
onBindViewHolder(holder.getBinding(), t, holder.getAdapterPosition());
118+
}
119+
120+
protected abstract void onBindViewHolder(VB binding, T item, int position);
121+
175122
public static class BindingViewHolder<VB extends ViewBinding> extends RecyclerView.ViewHolder {
176123

177124
private final VB binding;
@@ -195,8 +142,8 @@ public abstract class BindingViewDelegate<T, VB extends ViewBinding> extends
195142
class FooViewDelegate extends BindingViewDelegate<Foo, ItemFooBinding> {
196143

197144
@Override
198-
public void onBindViewHolder(@NotNull BindingViewHolder<ItemFooBinding> holder, Foo item) {
199-
holder.getBinding().tvFoo.setText(item.getValue());
145+
protected void onBindViewHolder(@NotNull ItemFooBinding binding, Foo foo, int position) {
146+
binding.tvFoo.setText(item.getValue());
200147
}
201148
}
202149
```
@@ -300,72 +247,7 @@ public class HomeFragment extends BaseBindingFragment<FragmentHomeBinding> {
300247

301248
### Adapter
302249

303-
下面提供两个适配器开源库的封装改造示例,如果你有在用这两个库,可以直接拷贝去用。如果是自己封装的适配器基类,可参考下面封装的思路进行改造。
304-
305-
- #### [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)
306-
307-
封装基类代码:
308-
309-
```java
310-
public abstract class BaseBindingQuickAdapter<T, VB extends ViewBinding>
311-
extends BaseQuickAdapter<T, BaseBindingQuickAdapter.BaseBindingHolder> {
312-
313-
public BaseBindingQuickAdapter() {
314-
this(-1);
315-
}
316-
317-
public BaseBindingQuickAdapter(@LayoutRes int layoutResId) {
318-
super(-layoutResId);
319-
}
320-
321-
@NotNull
322-
@Override
323-
protected BaseBindingHolder onCreateDefViewHolder(@NotNull ViewGroup parent, int viewType) {
324-
return new BaseBindingHolder(onCreateViewBinding(LayoutInflater.from(parent.getContext()), parent));
325-
}
326-
327-
protected abstract VB onCreateViewBinding(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent);
328-
329-
public static class BaseBindingHolder extends BaseViewHolder {
330-
331-
private final ViewBinding binding;
332-
333-
public BaseBindingHolder(@NotNull View view) {
334-
this(() -> view);
335-
}
336-
337-
public BaseBindingHolder(@NotNull ViewBinding binding) {
338-
super(binding.getRoot());
339-
this.binding = binding;
340-
}
341-
342-
@NonNull
343-
@SuppressWarnings("unchecked")
344-
public <VB extends ViewBinding> VB getViewBinding() {
345-
return (VB) binding;
346-
}
347-
}
348-
}
349-
```
350-
351-
封装后的使用示例:
352-
353-
```java
354-
public class FooAdapter extends BaseBindingQuickAdapter<Foo, ItemFooBinding> {
355-
@Override
356-
protected ItemFooBinding onCreateViewBinding(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
357-
return ItemFooBinding.inflate(inflater, parent, false);
358-
}
359-
360-
@Override
361-
protected void convert(@NotNull BaseBindingHolder holder, Foo item) {
362-
ItemFooBinding binding = holder.getViewBinding();
363-
binding.tvFoo.setText(item.getValue());
364-
}
365-
}
366-
```
367-
368-
- #### [MultiType](https://github.com/drakeet/MultiType)
250+
下面是第三方适配器库 [MultiType](https://github.com/drakeet/MultiType) 的封装示例,如果是自己封装的适配器基类,可参考下面的封装思路进行改造。
369251

370252
封装基类代码:
371253

@@ -378,8 +260,15 @@ public abstract class BindingViewDelegate<T, VB extends ViewBinding> extends
378260
return new BindingViewHolder<>(onCreateViewBinding(LayoutInflater.from(parent.getContext()), parent));
379261
}
380262

263+
@Override
264+
public void onBindViewHolder(@NonNull BindingViewHolder<VB> holder, T t) {
265+
onBindViewHolder(holder.getBinding(), t, holder.getAdapterPosition());
266+
}
267+
381268
protected abstract VB onCreateViewBinding(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent);
382269

270+
protected abstract void onBindViewHolder(VB binding, T item, int position);
271+
383272
public static class BindingViewHolder<VB extends ViewBinding> extends RecyclerView.ViewHolder {
384273

385274
private final VB binding;
@@ -407,8 +296,8 @@ public class FooViewDelegate extends BindingViewDelegate<Foo, ItemFooBinding> {
407296
}
408297

409298
@Override
410-
public void onBindViewHolder(@NotNull BindingViewHolder<ItemFooBinding> holder, Foo foo) {
411-
holder.getBinding().tvFoo.setText(item.getValue());
299+
protected void onBindViewHolder(@NotNull ItemFooBinding binding, Foo foo, int position) {
300+
binding.tvFoo.setText(item.getValue());
412301
}
413302
}
414303
```

docs/cn/java/brvah.md

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
首先添加依赖:
66

77
```gradle
8-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-brvah:1.2.6'
8+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-brvah:2.0.0'
99
```
1010

11-
在适配器重写创建 BaseViewHolder 的方法,通过 BindingHolderUtil 将 holder 和 绑定类进行绑定。然后就能通过 BindingHolderUtil.getBinding() 方法来获取 binding 对象了。
11+
通过 `BaseViewHolderUtil.getBinding(holder, VB::bind)` 方法来获取 binding 对象了。
1212

1313
```java
1414
public class FooAdapter extends BaseQuickAdapter<Foo, BaseViewHolder> {
@@ -17,21 +17,10 @@ public class FooAdapter extends BaseQuickAdapter<Foo, BaseViewHolder> {
1717
super(R.layout.item_foo);
1818
}
1919

20-
@NotNull
21-
@Override
22-
protected BaseViewHolder onCreateDefViewHolder(@NotNull ViewGroup parent, int viewType) {
23-
BaseViewHolder holder = super.onCreateDefViewHolder(parent, viewType);
24-
return BindingHolderUtil.bind(holder, ItemFooBinding::bind);
25-
}
26-
2720
@Override
2821
protected void convert(@NotNull BaseViewHolder holder, Foo foo) {
29-
ItemFooBinding binding = BindingHolderUtil.getBinding(holder);
22+
ItemFooBinding binding = BaseViewHolderUtil.getBinding(holder, ItemFooBinding::bind);
3023
binding.tvFoo.setText(foo.getValue());
3124
}
3225
}
33-
```
34-
35-
还可以自行封装一个 `BaseBindingQuickAdapter` 基类进行使用,这里已有[使用反射](/java/baseclass?id=adapter)[不使用反射](/java/baseclass?id=adapter-1)的基类代码供大家拷贝使用。
36-
37-
> 查看 BRVAH 源码可得知原本在创建 ViewHolder 时有使用反射,所以用反射进行封装只是替换了反射的内容,在性能上和原来一样。
26+
```

0 commit comments

Comments
 (0)