Skip to content

Commit 3627c6b

Browse files
committed
'添加网络请求状态,切换不同View'
1 parent 4181496 commit 3627c6b

File tree

56 files changed

+595
-78
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+595
-78
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
34
package="com.fuusy.jetpackkt">
45

56
<uses-permission android:name="android.permission.INTERNET" />
@@ -9,11 +10,12 @@
910
<application
1011
android:name=".MainApp"
1112
android:allowBackup="true"
12-
android:icon="@mipmap/ic_launcher"
13+
android:icon="@mipmap/ic_android"
1314
android:label="@string/app_name"
14-
android:roundIcon="@mipmap/ic_launcher_round"
15+
android:roundIcon="@mipmap/ic_android"
1516
android:supportsRtl="true"
16-
android:theme="@style/AppTheme">
17+
android:theme="@style/AppTheme"
18+
tools:replace="android:icon">
1719

1820
<activity
1921
android:name=".MainActivity"

app/src/main/java/com/fuusy/jetpackkt/MainActivity.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
4343
private lateinit var mFragmentAdapter: VpFragmentAdapter
4444

4545
override fun initData(savedInstanceState: Bundle?) {
46-
setupBottomNavigationBar()
47-
currentNavController
46+
if (savedInstanceState == null) {
47+
setupBottomNavigationBar()
48+
}
4849

4950
// mFragmentAdapter = VpFragmentAdapter(this, fragments)
5051
// mBinding?.run {

app/src/main/java/com/fuusy/jetpackkt/MainApp.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,26 @@ import android.app.Application
44
import android.content.Context
55
import androidx.multidex.MultiDex
66
import com.alibaba.android.arouter.launcher.ARouter
7+
import com.fuusy.common.loadsir.EmptyCallback
8+
import com.fuusy.common.loadsir.ErrorCallback
9+
import com.fuusy.common.loadsir.LoadingCallback
10+
import com.kingja.loadsir.core.LoadSir
711

812
class MainApp : Application() {
913

1014
override fun onCreate() {
1115
super.onCreate()
1216
initARouter()
17+
initLoadSir()
18+
}
19+
20+
private fun initLoadSir() {
21+
LoadSir.beginBuilder()
22+
.addCallback(ErrorCallback())
23+
.addCallback(LoadingCallback())
24+
.addCallback(EmptyCallback())
25+
.setDefaultCallback(LoadingCallback::class.java)
26+
.commit()
1327
}
1428

1529
private fun initARouter() {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
android:layout_width="match_parent"
1212
android:layout_height="match_parent"
1313
android:orientation="vertical"
14+
android:fitsSystemWindows="true"
1415
android:background="@color/color_ffffff">
1516

1617
<androidx.fragment.app.FragmentContainerView
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
<?xml version="1.0" encoding="utf-8"?>
2-
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3-
<background android:drawable="@drawable/ic_launcher_background"/>
4-
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3+
<background android:drawable="@drawable/ic_launcher_background"/>
4+
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
55
</adaptive-icon>
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
<?xml version="1.0" encoding="utf-8"?>
2-
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3-
<background android:drawable="@drawable/ic_launcher_background"/>
4-
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3+
<background android:drawable="@drawable/ic_launcher_background"/>
4+
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
55
</adaptive-icon>
83.8 KB
Loading
83.8 KB
Loading

common/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ dependencies {
1313
api 'com.blankj:utilcodex:1.29.0'
1414
implementation("com.tencent:mmkv-static:1.2.1")
1515

16+
api 'com.kingja.loadsir:loadsir:1.3.8'
1617
}

common/src/main/java/com/fuusy/common/base/BaseFragment.kt

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,55 +11,81 @@ import androidx.databinding.DataBindingUtil
1111
import androidx.databinding.ViewDataBinding
1212
import androidx.fragment.app.Fragment
1313
import androidx.lifecycle.Observer
14+
import com.fuusy.common.R
15+
import com.fuusy.common.databinding.BaseFragmentLayoutBinding
16+
import com.fuusy.common.loadsir.EmptyCallback
17+
import com.fuusy.common.loadsir.ErrorCallback
18+
import com.fuusy.common.network.IStateView
1419
import com.fuusy.common.support.Constants
20+
import com.fuusy.common.support.NetStateHelper
1521
import com.fuusy.common.utils.SpUtils
1622
import com.fuusy.common.view.LoadingDialog
23+
import com.kingja.loadsir.callback.Callback
24+
import com.kingja.loadsir.core.LoadService
25+
import com.kingja.loadsir.core.LoadSir
1726
import retrofit2.HttpException
1827
import java.net.SocketTimeoutException
1928

2029
private const val TAG = "BaseFragment"
21-
abstract class BaseFragment<T : ViewDataBinding, VM : BaseViewModel> : Fragment {
2230

23-
24-
constructor() : super()
31+
abstract class BaseFragment<T : ViewDataBinding, VM : BaseViewModel> : Fragment(),
32+
NetStateHelper.OnReloadListener {
2533

2634
var mBinding: T? = null
2735
var mViewModel: VM? = null
2836
private lateinit var mContext: Context
2937
private lateinit var mLoadingDialog: LoadingDialog
38+
private lateinit var loadService: LoadService<Any>
39+
private lateinit var mBaseContainBinding: BaseFragmentLayoutBinding
40+
41+
//请求失败时View
42+
private lateinit var errorView: View
43+
44+
//请求成功时View
45+
private lateinit var successView: View
46+
47+
//请求成功但数据为空时View
48+
private lateinit var emptyView: View
49+
private lateinit var netStateHelper: NetStateHelper
50+
51+
3052

3153
override fun onCreateView(
3254
inflater: LayoutInflater,
3355
container: ViewGroup?,
3456
savedInstanceState: Bundle?
3557
): View? {
58+
mBaseContainBinding =
59+
DataBindingUtil.inflate(inflater, R.layout.base_fragment_layout, container, false)
3660
mBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false)
37-
return mBinding?.root
61+
netStateHelper = NetStateHelper(context,container,mBinding?.root!!,mBaseContainBinding.baseContainer,this)
62+
63+
showSuccess()
64+
return mBaseContainBinding.root
3865
}
3966

4067
override fun onAttach(context: Context) {
4168
super.onAttach(context)
4269
mContext = context
4370
}
71+
4472
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4573
super.onViewCreated(view, savedInstanceState)
4674
mLoadingDialog = LoadingDialog(view.context, false)
47-
4875
mViewModel = getViewModel()
4976

50-
mViewModel?.loadingLiveData?.observe(this, Observer {
77+
mViewModel?.loadingLiveData?.observe(viewLifecycleOwner, Observer {
5178
if (it) {
5279
//show loading
53-
Log.d(TAG, "onViewCreated: show loading")
5480
showLoading()
5581
} else {
5682
Log.d(TAG, "onViewCreated: not show loading")
5783
dismissLoading()
5884
}
5985
})
60-
61-
mViewModel?.errorLiveData?.observe(this, Observer {
62-
Log.d(TAG, "onViewCreated: error ${it.message}")
86+
mViewModel?.errorLiveData?.observe(viewLifecycleOwner, Observer {
87+
Log.d(TAG, "onViewCreated: error ")
88+
showError()
6389
throwableHandler(it)
6490
})
6591
initData()
@@ -96,7 +122,7 @@ abstract class BaseFragment<T : ViewDataBinding, VM : BaseViewModel> : Fragment
96122
is HttpException -> {
97123
if (e.code() == 504) {
98124
showToast("网络异常,请检查您的网络状态")
99-
}else if (e.code() == 404) {
125+
} else if (e.code() == 404) {
100126
showToast("请求地址不存在")
101127
}
102128
}
@@ -116,4 +142,28 @@ abstract class BaseFragment<T : ViewDataBinding, VM : BaseViewModel> : Fragment
116142
}
117143
return true
118144
}
145+
146+
147+
/**
148+
* 根据net请求状态,数据为null
149+
*/
150+
protected fun showEmpty() {
151+
netStateHelper.showEmpty()
152+
}
153+
154+
protected fun showError() {
155+
netStateHelper.showError()
156+
}
157+
158+
protected fun showSuccess() {
159+
netStateHelper.showSuccess()
160+
}
161+
162+
override fun onReload() {
163+
onRetry()
164+
}
165+
166+
protected fun onRetry() {
167+
Log.d(TAG, "onRetry: ")
168+
}
119169
}

0 commit comments

Comments
 (0)