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

У меня есть три вида и один вид деятельности. 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) } 
Intereting Posts
Перехватчик Kotlintest и латинитовые вары Изменить уведомления в Realm для внутренних объектов? Kotlin: Public получить частный набор var Как я могу добавить данные к объекту Kotlin и получить его на странице Vuejs Программировать триггерную кнопку HTML в Java findViewById ClassCastExcpetion Android – Как изменить цвет рисования пользовательского вида? Kotlin: Как можно получить доступ к функциям расширения внутри одного типа извне? Kotlin Vertx Тип Несоответствие найдено Future <Unit> ожидаемый обработчик <AsyncResult <Void >> UnsupportedOperationException Команда «android» больше не включена в SDK Почему добавление представления в мой макет меняет ширину всего макета? Как запретить вызовы функций с определенным подтипом типа параметра? Kotlin: Как расширить класс перечисления с помощью функции расширения Простой пример kotlin печатает kotlin.Unit при печати результата функции infix Как сделать первичный ключ как автоинкремент для Room Persistence lib