Как справиться с намерениями с Котлином и Дирижером

У меня есть три вида и один вид деятельности. MainActivity – MainController – PushedController – NotificationOpenController.

MainController содержит кнопку, при нажатии на нее поступает содержимое черного ящика, и устройство получает уведомление в лотке уведомлений.

Когда кликнуто уведомление, я хочу, чтобы поведение было таким, как будто

router.pushController(RouterTransaction.with(NotificationOpenController(bundle)) .pushChangeHandler(VerticalChangeHandler()) .popChangeHandler(VerticalChangeHandler())) 

только что произошло.

Любые советы или изменения, связанные с Kotlin, оцениваются по мере того, как я делаю это, чтобы изучить язык

Я не знал, как правильно это сделать через намерения, возможно, трансляцию? но после некоторых проб и ошибок мой код теперь выглядит так:

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) App.graph.inject(this) setContentView(R.layout.activity_main_kotlin) Log.d(TAG,"${FirebaseInstanceId.getInstance().getToken()}") router = Conductor.attachRouter(this, controller_container, savedInstanceState) val startingIntent : Intent? = intent if(startingIntent?.extras != null){ transitionToNotificationOpenController(startingIntent?.extras) } else{ if (!router.hasRootController()) { router.setRoot(RouterTransaction.with(MainController())); } } } override fun onBackPressed() { if (!router.handleBack()) { super.onBackPressed() } } fun transitionToNotificationOpenController(bundl: Bundle?){ router.pushController(RouterTransaction.with(NotificationOpenController(bundl)) .pushChangeHandler(VerticalChangeHandler()) .popChangeHandler(VerticalChangeHandler())) } 

Представление «Уведомление» построено следующим образом:

 val builder = NotificationCompat.Builder(this).setContentTitle("Title").setContentText("Text") val notificationIntent = Intent(this, MainActivity::class.java) notificationIntent.putExtra("message",messageBody) val contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT) ... manager.notify(1,builder.build()) 

Тем не менее, используя этот подход, анимация становится неправой, и пользователь может видеть только «типичное» всплывающее представление после загрузки некоторых или запуска нового действия, поскольку при нажатии уведомления появляется уведомление о деятельности, а затем действие Пауза -> Действие Возобновите работу после нажатия на кнопку.

Достигнут желаемый результат.

 <activity android:name=".ui.MainActivity" android:launchMode="singleTop" > 

Основная деятельность:

 override fun onResume(){ super.onResume() val bundle : Bundle? = intent.extras if (bundle != null){ transitionToNotificationOpenController(bundle) } } /** * MainActivity is defined in AndroidManifest.xml as android:launchMode="singleTop" * onNewIntent acts as an entrypoint whenever an intent is received pointing to MainActivity, * since we don't want to launch a new instance of the Activity. * (because we want to keep the stack of RouterTransactions) */ override fun onNewIntent(intent : Intent){ setIntent(intent) }