(它要求做到點(diǎn)擊某個(gè)按鈕觸發(fā)跳轉(zhuǎn)到某個(gè)activity前進(jìn)行登錄判斷,等待登錄成功后自動(dòng)跳轉(zhuǎn)到目標(biāo)activity)
這里以BaseApplication來(lái)做數(shù)據(jù)中轉(zhuǎn),代碼塊對(duì)象作為跳轉(zhuǎn)執(zhí)行代碼的數(shù)據(jù)存儲(chǔ):
class BaseApplication : Application() {
companion object {
@JvmStatic
var isLogin: Boolean = false
@JvmStatic
var loginSuccessCall: () -> Unit = {}
}
}
這里有三個(gè)Activity:MainActivity、LoginActivity、StackShowActivity(進(jìn)入前需要登錄),現(xiàn)在需要從MainActivity跳轉(zhuǎn)到StackShowActivity。(所有的Activity繼承自BaseActivity)
open class BaseActivity : AppCompatActivity() {
private val TAG = "BaseActivity"
/**
* 核心邏輯
*/
fun goActivityWhenLogin(detail: () -> Unit) {
when (isLogin()) {
true -> detail.invoke()
false -> goLoginAct(detail)
}
}
private fun goLoginAct(detail: () -> Unit) {
BaseApplication.loginSuccessCall = detail
startActivity(Intent(this, LoginActivity::class.java))
}
/**
* 登錄成功后調(diào)用
*/
fun loginSuccess() {
BaseApplication.loginSuccessCall.invoke()
}
private fun isLogin(): Boolean {
return BaseApplication.isLogin
}
}
MainActivity中點(diǎn)擊跳轉(zhuǎn):
fun toStackShowActivity(view: View) {
goActivityWhenLogin {
val intent = Intent(this, StackShowActivity::class.java)
intent.putExtra("url","http://**")
startActivity(intent)
}
}
LoginActivity中登錄成功后調(diào)用:
fun setLoginSuccess(view: View) {
BaseApplication.isLogin = true
finish()
loginSuccess()
}
以上即可實(shí)現(xiàn)功能要求。
整體思路就兩點(diǎn):
- 代碼塊對(duì)象做數(shù)據(jù)存儲(chǔ)
- BaseApplication做數(shù)據(jù)中轉(zhuǎn)
此處代碼只是為了示例,實(shí)際程序設(shè)計(jì)中還需要考慮loginSuccessCall是否已經(jīng)消費(fèi)等問(wèn)題(并不是所有人都會(huì)首先使用類似于goActivityWhenLogin這樣自定義的跳轉(zhuǎn)方式)。
看完文章,如果有幫助,不忘點(diǎn)個(gè)贊or喜歡!