台达PLC程序解密【专业】【信誉】【18230062509】说起 BaseActivity 和 BaseFragment,这里要写的东西一定要考虑好,因为这里的东西一定要是绝大多数类都能用到的方法,还有一些是要留给子类实现的。说到这里就需要想一下什么是绝大多数类都能用到的方法,看过项目介绍的应该知道项目实现了五种不同的状态:正常显示内容、加载中、没有网络、没有内容、加载错误,很显然,这些内容都应该写在 BaseActivity 和 BaseFragment 中,那么接下来就到了激动人心的码代码环节!
1、1 BaseActivity
abstract class BaseActivity : AppCompatActivity(){
/**
* Activity中显示加载等待的控件。
*/
private var loading: ProgressBar? = null
/**
* Activity中由于服务器异常导致加载失败显示的布局。
*/
private var loadErrorView: View? = null
/**
* Activity中由于网络异常导致加载失败显示的布局。
*/
private var badNetworkView: View? = null
/**
* Activity中当界面上没有任何内容时展示的布局。
*/
private var noContentView: View? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setupViews()
}
protected open fun setupViews() {
loading = findViewById(R.id.loading)
noContentView = findViewById(R.id.noContentView)
badNetworkView = findViewById(R.id.badNetworkView)
loadErrorView = findViewById(R.id.loadErrorView)
if (loading == null) {
Log.e(TAG, "loading is null")
}
if (badNetworkView == null) {
Log.e(TAG, "badNetworkView is null")
}
if (loadErrorView == null) {
Log.e(TAG, "loadErrorView is null")
}
}
companion object {
private const val TAG = "BaseActivity"
}
}
复制代码
好了,先放这么多,放太多会懵逼的。。。来看下代码吧:首先设置为抽象类是为啥就不说了,这个不知道的话该去学习 Java 基础了,然后把需要的 View 都找到,接下来就需要一个接口了,需要把在 Activity 或 Fragment 中进行数据请求所需要经历的生命周期函数抽出来,这样 BaseActivity 和 BaseFragment 就可以重复利用了,说干就干:
interface RequestLifecycle {
fun startLoading()
fun loadFinished()
fun loadFailed(msg: String?)
}
复制代码
那么接下来接该改造下 BaseActivity 了:
abstract class BaseActivity : AppCompatActivity(), RequestLifecycle {
/**
* 当Activity中的加载内容服务器返回失败,通过此方法显示提示界面给用户。
*
* @param tip
* 界面中的提示信息
*/
protected fun showLoadErrorView(tip: String = "加载数据失败") {
loadFinished()
if (loadErrorView != null) {
val loadErrorText = loadErrorView?.findViewById<TextView>(R.id.loadErrorText)
loadErrorText?.text = tip
loadErrorView?.visibility = View.VISIBLE
return
}
}
/**
* 当Activity中的内容因为网络原因无法显示的时候,通过此方法显示提示界面给用户。
*
* @param listener
* 重新加载点击事件回调
*/
protected fun showBadNetworkView(listener: View.OnClickListener) {
loadFinished()
if (badNetworkView != null) {
badNetworkView?.visibility = View.VISIBLE
badNetworkView?.setOnClickListen