用LiveData优雅地实现Android登录后收藏、点赞等交互

364 阅读1分钟

背景

业务需求:未登录的列表页能够看到收藏按钮,点击收藏,需要先跳转到登录页,登录成功后再自动执行收藏逻辑。正常情况下往往会选择发送EventBus事件来解决,但是该方式不够优雅。

用LiveData优雅地实现登录后收藏、点赞等交互

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tv.setOnClickListener {
            if (!UserInfoManager.isLogin()) {
                UserInfoManager.login(this).observe(this, Observer<Boolean> {
                    if (it) {
                        doSomeThing()
                    }
                }
                )
            } else {
                doSomeThing()
            }
        }
    }

    fun doSomeThing() {
        tv.text = "收藏成功"
    }
}
object UserInfoManager {
    var isLoginStatus = false
    var userLiveData = MutableLiveData<Boolean>()

    fun isLogin(): Boolean {
        return isLoginStatus
    }

    fun loginSuccess(isLoginStatus: Boolean) {
        this.isLoginStatus = isLoginStatus
        if (this.isLoginStatus) {
            userLiveData.postValue(isLoginStatus)
        }
    }

    fun login(context: Context): LiveData<Boolean> {
        val intent = Intent(context, LoginActivity::class.java)
        context.startActivity(intent)
        return userLiveData
    }
}