попробуйте makeSceneTransitionAnimation в котлин

во время обучения kotlin я пытаюсь создать makeSceneTransitionAnimation для перехода изображения, но он не работает, как в java, это мой код из класса Adapter

itemView.imageContent.setOnClickListener { val i = Intent(context, ImagePreviewActivity::class.java) i.putExtra("IMAGE", item.content) val trans = context.getString(R.string.transition) val options = ActivityOptionsCompat.makeSceneTransitionAnimation( Activity(), itemView.imageContent, trans ) context.startActivity(i, options.toBundle()) } 

это мой логарифм

 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.view.Window.hasFeature(int)' on a null object reference at android.app.ActivityOptions.makeSceneTransitionAnimation(ActivityOptions.java:709) at android.app.ActivityOptions.makeSceneTransitionAnimation(ActivityOptions.java:648) at android.app.ActivityOptions.makeSceneTransitionAnimation(ActivityOptions.java:622) at android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAnimation(ActivityOptionsCompat.java:172) at com.docotel.binmaspublic.module.report.ReportAdapter$ViewHolder$bind$2.onClick(ReportAdapter.kt:130) 

извините, если вы нашли это как дублирующий вопрос

    Это не имеет ничего общего с Java и Kotlin.

    R.string.transition – это идентификатор для ресурса String, это не фактическое значение.
    Чтобы получить значение, которое вам нужно использовать:

     context.getString(R.string.transition) 

    На этой строке:

     val options = ActivityOptionsCompat.makeSceneTransitionAnimation( Activity(), itemView.imageContent, trans ) 

    Вы создаете новый экземпляр Android Activity. Но вы должны передать свою текущую деятельность (возможно, this@MyActivity в этом случае).

    Edito:
    Предполагая, что itemView.imageContent является imageView, а item.content – строкой. Вы можете реализовать calllback в своем адаптере и перенести код в OnClickListener на создание адаптера. Чуть подобное.

     class MyAdapter : YourBaseAdapter(/*args*/) { var onItemClickListener = { view: ImageView, content: String -> } ///... itemView.imageContent.setOnClickListener { onItemClickListener(itemView.imageContent, item.content) } //... } //end of MyAdapter 

    и в вашем наборе инициализации класса адаптера:

     myAdapter.onItemClickListener = { view, content -> val i = Intent(context, ImagePreviewActivity::class.java) i.putExtra("IMAGE", content) val trans = context.getString(R.string.transition) val options = ActivityOptionsCompat.makeSceneTransitionAnimation( theReferenceOfYourActivity, view, trans ) context.startActivity(i, options.toBundle()) } 

    Вы также можете передать ссылку своей деятельности на свой конструктор адаптера, но я не рекомендую его.


    Из файла makeSceneTransitionAnimation :

    Создайте ActivityOptions для перехода между действиями с использованием анимации анимации кросс-активности. Этот метод переносит положение нескольких общих элементов в начальную активность. Позиция первого элемента в sharedElements будет использоваться в качестве эпицентра для выхода Transition. Позиция связанного совместно используемого элемента в запущенной деятельности будет эпицентром его входного перехода.

    Для этого необходимо включить android.view.Window.FEATURE_CONTENT_TRANSITIONS в вызывающей активности, чтобы вызвать переход на выход. То же самое должно быть в вызываемой активности, чтобы получить переход ввода.

    Параметры:
    activity – Activity, в окне которого содержатся общие элементы.
    sharedElements – имена общих элементов для передачи вызываемой активности и связанных с ними представлений. Каждый из представлений должен иметь уникальное имя общего элемента.

    Возвращает: возвращает новый объект ActivityOptions, который можно использовать для предоставления этих опций в качестве опций Bundle при запуске операции.