Skip to content

Commit 97a3992

Browse files
Prepare for release 4.0.1
1 parent 86e420d commit 97a3992

12 files changed

+161
-37
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ Add dependencies in your module `build.gradle` :
5555
```groovy
5656
dependencies {
5757
// java
58-
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview:4.0.0'
58+
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview:4.0.1'
5959
6060
// kotlin
61-
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview-ktx:4.0.0'
61+
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview-ktx:4.0.1'
6262
}
6363
```
6464

README_ZH.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ allprojects {
5757
```groovy
5858
dependencies {
5959
// java
60-
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview:4.0.0'
60+
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview:4.0.1'
6161
6262
// kotlin
63-
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview-ktx:4.0.0'
63+
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview-ktx:4.0.1'
6464
}
6565
```
6666

docs/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ allprojects {
5353
```groovy
5454
dependencies {
5555
// java
56-
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview:4.0.0'
56+
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview:4.0.1'
5757
5858
// kotlin
59-
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview-ktx:4.0.0'
59+
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview-ktx:4.0.1'
6060
}
6161
```
6262

docs/img/base_activity_code.png

-90 Bytes
Loading
-3.57 KB
Loading
-11.6 KB
Loading

docs/img/base_fragment_code.png

-218 Bytes
Loading

docs/zh/delegate.md

+44-9
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
```groovy
1010
dependencies {
11-
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview-ktx:4.0.0'
11+
implementation 'com.github.DylanCaiCoding.LoadingStateView:loadingstateview-ktx:4.0.1'
1212
}
1313
```
1414

@@ -23,10 +23,45 @@ dependencies {
2323

2424
![img.png](../img/base_activity_code.png)
2525

26+
<details>
27+
<summary>查看代码</summary>
28+
29+
```kotlin
30+
abstract class BaseActivity(private val layoutRes: Int) : AppCompatActivity(),
31+
LoadingState by LoadingStateDelegate(), OnReloadListener, Decorative {
32+
33+
override fun onCreate(savedInstanceState: Bundle?) {
34+
super.onCreate(savedInstanceState)
35+
setContentView(layoutRes)
36+
decorateContentView(this, this)
37+
}
38+
}
39+
```
40+
41+
</details>
42+
2643
#### **Fragment**
2744

2845
![img.png](../img/base_fragment_code.png)
2946

47+
<details>
48+
<summary>查看代码</summary>
49+
50+
```kotlin
51+
abstract class BaseFragment(private val layoutRes: Int) : Fragment(),
52+
LoadingState by LoadingStateDelegate(), OnReloadListener, Decorative {
53+
54+
override fun onCreateView(
55+
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
56+
): View? {
57+
val root = inflater.inflate(layoutRes, container, false)
58+
return root.decorate(this, this)
59+
}
60+
}
61+
```
62+
63+
</details>
64+
3065
<!-- tabs:end -->
3166

3267
这样改造基类后会得到以下的增强:
@@ -173,13 +208,13 @@ class ToolbarViewDelegate : BaseToolbarViewDelegate() {
173208
var ToolbarConfig.rightTextColor: Int? by toolbarExtras() // 增加 rightTextColor 扩展属性
174209

175210
class ToolbarViewDelegate : BaseToolbarViewDelegate() {
176-
177-
// ...
178-
179-
override fun onBindToolbar(config: ToolbarConfig) {
180-
// ...
181-
config.rightTextColor?.let { tvRight.setTextColor(it) } // 处理扩展属性
182-
}
211+
212+
// ...
213+
214+
override fun onBindToolbar(config: ToolbarConfig) {
215+
// ...
216+
config.rightTextColor?.let { tvRight.setTextColor(it) } // 处理扩展属性
217+
}
183218
}
184219
```
185220

@@ -282,7 +317,7 @@ setHeaders(
282317

283318
```kotlin
284319
class ScrollingDecorViewDelegate(
285-
private val activity: Activity,
320+
private val activity: Activity,
286321
private val title: String
287322
) : LoadingStateView.DecorViewDelegate() {
288323

docs/zh/migration-guide.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# 老版本升级指南
22

3-
`4.0.0` 版本对用法进行了优化,移除了 `ViewHolder`,使用起来更加简单,不过就意味着不能兼容之前的代码。建议根据[文档](/zh/basic-usage)改成新的用法,通常是封装在基类,要改的不多,`ViewHolder` 的代码需要移到 `onCreateView()` 中。
3+
`4.0.1` 版本对用法进行了优化,移除了 `ViewHolder`,使用起来更加简单,不过就意味着不能兼容之前的代码。建议根据[文档](/zh/basic-usage)改成新的用法,通常是封装在基类,要改的不多,`ViewHolder` 的代码需要移到 `onCreateView()` 中。
44

55
但是如果报红的地方特别多,个人有一个折中的方案。由于之前版本只有一个两三百行的 kt 文件,那么可以把源码拷贝出来并删除依赖,也就是说改成源码的方式集成,全局改一下相关包名。然后就可以添加新版本依赖进行使用,再慢慢将老用法改成新用法。

docs/zh/viewbinding.md

+98-15
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ LoadingStateView loadingStateView = new LoadingStateView(binding.getRoot(), onRe
2727
添加依赖:
2828

2929
```groovy
30-
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:2.0.6'
30+
implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:2.1.0'
3131
```
3232

3333
根据[文档](https://dylancaicoding.github.io/ViewBindingKTX/#/zh/baseclass)集成 ViewBinding,再对 ViewBinding 的根视图进行装饰。以下是在委托用法基础上修改的代码:
@@ -38,35 +38,118 @@ implementation 'com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-base:2.0.6'
3838

3939
![img.png](../img/base_binding_activity_code.png)
4040

41+
<details>
42+
<summary>查看代码</summary>
43+
44+
```kotlin
45+
abstract class BaseBindingActivity<VB : ViewBinding> : AppCompatActivity(),
46+
LoadingState by LoadingStateDelegate(), OnReloadListener, Decorative,
47+
ActivityBinding<VB> by ActivityBindingDelegate() {
48+
49+
override fun onCreate(savedInstanceState: Bundle?) {
50+
super.onCreate(savedInstanceState)
51+
setContentViewWithBinding()
52+
binding.root.decorate(this, this)
53+
}
54+
}
55+
```
56+
57+
</details>
58+
4159
#### **Fragment**
4260

4361
![img.png](../img/base_binding_fragment_code.png)
4462

63+
<details>
64+
<summary>查看代码</summary>
65+
66+
```kotlin
67+
abstract class BaseBindingFragment<VB : ViewBinding> : Fragment(),
68+
LoadingState by LoadingStateDelegate(), OnReloadListener, Decorative,
69+
FragmentBinding<VB> by FragmentBindingDelegate() {
70+
71+
override fun onCreateView(
72+
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
73+
): View? {
74+
return createViewWithBinding(inflater, container).decorate(this, this)
75+
}
76+
}
77+
```
78+
79+
</details>
80+
4581
<!-- tabs:end -->
4682

47-
由于给基类增加了 ViewBinding 泛型,会影响到已有基类的使用。那么对于已有的项目,建议继承原基类扩展出一个支持 ViewBinding 的基类
83+
这样封装后不仅能在 Activity 或 Fragment 获取 `binding` 属性,还能很方便地指定显示缺省页的区域
4884

49-
我们还可以再改进一下,增加一个 `open val contentView` 属性,修改如下。
85+
比如我们在已有的项目迭代开发,一些页面的布局已经写了标题栏。如果直接调用 `showLoadingView()` 函数,缺省页会把标题栏给覆盖了,通常要在标题栏下方显示缺省页,此时就可以重写 `contentView` 属性,声明在哪个控件显示缺省页,比如:
5086

51-
<!-- tabs:start -->
87+
```kotlin
88+
class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
5289

53-
#### **Activity**
90+
override fun onCreate(savedInstanceState: Bundle?) {
91+
super.onCreate(savedInstanceState)
92+
showLoadingView()
93+
// ...
94+
}
95+
96+
override val contentView get() = binding.container
97+
}
98+
```
5499

55-
![img.png](../img/base_binding_activity_code2.png)
100+
### 已有的基类如何修改
56101

57-
#### **Fragment**
102+
由于要给基类增加 ViewBinding 泛型,肯定不可能直接修改基类,这会影响到已有的代码,建议继承原基类再扩展出一个支持 ViewBinding 的基类。
58103

59-
![img.png](../img/base_binding_fragment_code2.png)
104+
假设已有的基类是这种常见的封装,通过 `getLayoutId()` 函数去设置布局。
60105

61-
<!-- tabs:end -->
106+
```java
107+
public abstract class BaseActivity extends AppCompatActivity {
108+
109+
@Override
110+
protected void onCreate(@Nullable Bundle savedInstanceState) {
111+
super.onCreate(savedInstanceState);
112+
setContentView(getLayoutId());
113+
initData();
114+
initViews();
115+
}
116+
117+
public abstract int getLayoutId();
118+
public abstract void initData();
119+
public abstract void initViews();
120+
}
121+
```
122+
123+
目前直接继承是实现不了的,因为需要重写 `setContentView()` 的代码,所以要先将 `setContentView()` 抽到一个函数中。
124+
125+
```java
126+
@Override
127+
protected void onCreate(@Nullable Bundle savedInstanceState) {
128+
super.onCreate(savedInstanceState);
129+
initContentView();
130+
initData();
131+
initViews();
132+
}
62133

63-
这样重写 `contentView` 属性可任意指定显示缺省页的区域,比如用了 `DrawerLayout`,那么需要在 `DrawerLayout` 的子容器显示缺省页。
134+
protected void initContentView() {
135+
setContentView(getLayoutId());
136+
}
137+
```
138+
139+
之后就可以继承基类重写该函数替换掉原来的 `setContentView()` 工作。
64140

65141
```kotlin
66-
class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
142+
abstract class BaseBindingActivity<VB : ViewBinding> : BaseActivity(),
143+
LoadingState by LoadingStateDelegate(), OnReloadListener, Decorative,
144+
ActivityBinding<VB> by ActivityBindingDelegate() {
67145

68-
// ...
69-
70-
override val contentView get() = binding.contentContainer
146+
override fun initContentView() {
147+
setContentViewWithBinding()
148+
binding.root.decorate(this, this)
149+
}
150+
151+
override fun getLayoutId() = -1 // 使用 ViewBinding 后,就不需要布局 id 了
71152
}
72-
```
153+
```
154+
155+
Fragment 的修改也同理。

sample-kotlin/src/main/java/com/dylanc/loadingstateview/sample/kotlin/base/BaseBindingActivity.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ import com.dylanc.loadingstateview.OnReloadListener
2626
import com.dylanc.viewbinding.base.ActivityBinding
2727
import com.dylanc.viewbinding.base.ActivityBindingDelegate
2828

29-
abstract class BaseBindingActivity<VB : ViewBinding> : AppCompatActivity(), OnReloadListener, Decorative,
30-
LoadingState by LoadingStateDelegate(), ActivityBinding<VB> by ActivityBindingDelegate() {
29+
abstract class BaseBindingActivity<VB : ViewBinding> : AppCompatActivity(),
30+
LoadingState by LoadingStateDelegate(), OnReloadListener, Decorative,
31+
ActivityBinding<VB> by ActivityBindingDelegate() {
3132

3233
override fun onCreate(savedInstanceState: Bundle?) {
3334
super.onCreate(savedInstanceState)

sample-kotlin/src/main/java/com/dylanc/loadingstateview/sample/kotlin/base/BaseBindingFragment.kt

+9-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package com.dylanc.loadingstateview.sample.kotlin.base
1818

1919
import android.os.Bundle
2020
import android.view.LayoutInflater
21+
import android.view.View
2122
import android.view.ViewGroup
2223
import androidx.fragment.app.Fragment
2324
import androidx.viewbinding.ViewBinding
@@ -28,9 +29,13 @@ import com.dylanc.loadingstateview.OnReloadListener
2829
import com.dylanc.viewbinding.base.FragmentBinding
2930
import com.dylanc.viewbinding.base.FragmentBindingDelegate
3031

31-
abstract class BaseBindingFragment<VB : ViewBinding> : Fragment(), OnReloadListener, Decorative,
32-
LoadingState by LoadingStateDelegate(), FragmentBinding<VB> by FragmentBindingDelegate() {
32+
abstract class BaseBindingFragment<VB : ViewBinding> : Fragment(),
33+
LoadingState by LoadingStateDelegate(), OnReloadListener, Decorative,
34+
FragmentBinding<VB> by FragmentBindingDelegate() {
3335

34-
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) =
35-
createViewWithBinding(inflater, container).decorate(this, this)
36+
override fun onCreateView(
37+
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
38+
): View? {
39+
return createViewWithBinding(inflater, container).decorate(this, this)
40+
}
3641
}

0 commit comments

Comments
 (0)