背景
业务需求:未登录的列表页能够看到收藏按钮,点击收藏,需要先跳转到登录页,登录成功后再自动执行收藏逻辑。正常情况下往往会选择发送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
}
}