Kotlin выполняет определенную деятельность и получает доступ к объекту класса - PullRequest
0 голосов
/ 03 ноября 2018

Я следовал этому руководству ( Как выполнить определенное действие в Android Studio? ), чтобы запустить другое действие помимо моего основного.

У меня есть макеты GetUser.xml и ShowUser.xml. В GetUser.xml пользователь может ввести свое имя и возраст.

У меня есть пользовательский класс с конструктором, который принимает имя и возраст внутри GetUser.kt. Я инициализирую объект User со значениями: name, age, которые я получил из полей ввода в GetUser.

Теперь, когда я запускаю другое действие ShowUser, я хочу получить доступ к этому объекту, чтобы я мог получить значения и отобразить его в ShowUser.xml

У меня вопрос, как мне получить доступ к этому объекту из GetUser.kt и использовать его в ShowUser.kt?

1 Ответ

0 голосов
/ 03 ноября 2018

Насколько я понимаю, вы ищете extra.

При запуске одного Activity с другого, вы можете передавать данные через extra.

Допустим, у вас есть класс Person с String name и int age.

Есть 2 простых способа сделать это.

1. Отправить данные отдельно

Поскольку Person - это простой класс, состоящий из 2 полей-членов, мы можем передавать все данные отдельно и объединять их в Person в запущенном Activity.

Нам нужно Intent, чтобы сделать это.

val p = Person(name, age) // Person data
val intent = Intent(this, NewActivity::class.java)
intent.putExtra('name', p.name)
intent.putExtra('age', p.age)
startActivity(intent)

При запуске NewActivity onCreate(), вы можете получить эти данные и сделать из них объект.

val name = intent.getStringExtra('name')
val age = intent.getIntExtra('age')
val combinedPersonData = Person(name, age)

2. Отправить весь экземпляр

Если класс, который вы пытаетесь отправить, слишком велик для использования метода 1, вы можете попробовать отправить его как сам по себе.

Для этого вам нужно внедрить Serializable или Parcelable для вашего класса.

class Person(val name: String, val age: Int): Serializable { ... }

Убедитесь, что все члены класса также являются сериализуемыми или примитивными типами.

При этом вы можете отправить объект person как сериализуемый объект.

val p = Person(name, age) // Person data
val intent = Intent(this, NewActivity::class.java)
intent.putExtra('person', p)
startActivity(intent)

В приемнике onCreate(),

val p = intent.getSerializableExtra('person') as Person

получит данные while Person.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...