Работая над существующим проектом, я нашел довольно необычную реализацию (по крайней мере, для меня). Поскольку я не общаюсь с предыдущим разработчиком, который уже ушел, и прежде чем я отклоню это как случай простого копирования и вставки кода из другой части нашей кодовой базы, я хотел бы спросить об этом сообщество SO.
Вот ваша повседневная активность, расширяющая BaseActivity, и реализация:
class SomeActivity : BaseActivity(R.layout.some_activity) {
...
private fun close() {
if(backToMain)
finish()
}
else
goToMain(this)
}
companion object {
fun goToMain(activity: AppCompatActivity) {
val intent = Intent(activity, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
activity.startActivity(intent)
EventBus.getDefault().post(Event(Event.Type.ActivityFinish))
}
}
...
}
В BaseActivity.kt есть подписка на событие, вызывающее finish().
@Subscribe override fun onEvent(event: Event) {
when (event.type) {
Event.Type.ActivityFinish -> super.finish()
else -> {}
}
}
Теперь, зачем кому-то использовать EventBus для вызова Activity.finish()
из расширенной BaseActivity вместо того, чтобы просто вызывать ее тут и там (в описанной выше SignActivity)? Даже если SomeActivity на самом деле является фрагментом, вы можете просто вызвать getActivity.finish()
.
* Что касается флагов намерения, вы также можете использовать Activity.finishAffinity()
< /a> для завершения всех действий в заднем стеке, если ваш минимальный SDK равен 16.
Заранее спасибо за удовлетворение моего любопытства. :D
sign IN => signUp(on successful signup , kill signIN and take user to Someother screen) => Somesceen
- person Pavneet_Singh   schedule 03.08.2017