Передача данных между активити

193
19 апреля 2018, 13:02

Мне нужно сделать приложение со следующей логикой: нажимаю кнопку "открыть" (в верхней части) -> открывается галерея, выбирается изображение и вставляется посреди экрана; внизу есть кнопка "поехали" -> открывается новая активити, в которой вставлено это изображение.

Суть проблемы: не могу понять ка передать расположение (contentUri) из первой активити во вторую, так как это расположение я получаю внутри переопределённого onActivityResult(). То есть расположение определяется внутри onActivityResult(), а переход в новую активити происходит при нажатии кнопки, на которой весит отдельная функция newAct(). Я смог произвести запуск новой активити и соответственно передачу данных с помощью putExtra только прямо из onActivityResult() (выбрал картинку и сразу переход в новую актвити), но тогда кнока "процесс" не задействуется. Пытался сделать глобальный intent, но приложение крашится

Answer 1

Объявите в вашей активити, где вы обрабатываете onActivityResult(), поле uri, которое вы проинициализируете в этом методе. А затем, при нажатии кнопки, у вас будет доступ к uri, т.к. оно лежит в поле. Однако, не забудьте добавить проверку, т.к. если нажать на кнопку до того, как вы проинициализируете поле, вместо нужного uri будет передан null (а в случае с Kotlin, если использовать lateinit — получите исключение; либо также можете использовать Uri? тип и проверять на null, чтобы узнать, было ли поле проинициализировано; а также с последней версии Kotlin можно проверить, было ли проинициализировано lateinit-поле).

class MyActivity : Activity() {
    private lateinit var uri: Uri
    private lateinit var button: Button
    public override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        button = findViewById<View>(R.id.my_button) as Button
        button.setOnClickListener {
            startActivity(Intent().putExtra("uri", uri.toString()))
        }
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
        super.onActivityResult(requestCode, resultCode, data)
            uri = // получите uri
    }
}
READ ALSO
Как перевести строку &ldquo;1d 2h 3m 4s&rdquo; в миллисекунды?

Как перевести строку “1d 2h 3m 4s” в миллисекунды?

Как перевести строку в миллисекунды?

159
Объединение sql запросов в один класс JDBC

Объединение sql запросов в один класс JDBC

Для подключения к бд и работы с ней использую две библиотеки commons dbutils и commons dbcp2 (пул подключений к бд)

162
Планировщик задач на Java

Планировщик задач на Java

Здравствуйте! Нужно создать "Планировщик задач на Java"Мы с другом надумали:

397
Проблема с памятью в приложении java на centOS

Проблема с памятью в приложении java на centOS

Добрый день! Такая проблема: Есть spring-boot(15

160