#android #string #kotlin #android-intent #intentservice
Вопрос:
Итак, у меня есть три действия для моего приложения. Я беру имя пользователя у пользователя(на главном экране) и хочу показать его на последнем экране (Экран результатов). Я пробовал использовать строковые константы, а затем отправлять строковое значение с помощью намерения из одного действия во второе и в третье. Но я не могу увидеть имя на экране результатов. Что это я делаю не так ?
Я следую всем правилам, и приложение работает нормально без ошибок, но имя пользователя не отображается на экране.
В константах.кт
const val USER_NAME: String = "user_name"
В основной деятельности.тыс. т
val nameEditText = findViewById<TextView>(R.id.name_edit_text)
val name = nameEditText.text.toString()
val Intent = Intent(this, QuizQuestionActivity::class.java)
intent.putExtra(Constants.USER_NAME, name)
startActivity(intent)
В QuizQuestionActivity.kt
private var mUsername: String? = null
mUsername = intent.getStringExtra(CONSTANTS.USER_NAME)
val intent = Intent(this, ResultActivity::class.java)
intent.putExtra(Constants.USER_NAME, mUsername)
startActivity(intent)
В результате.кт
val username = intent.getStringExtra(Constants.USER_NAME)
tv_name.text = username
Это весь код, который я пытаюсь выполнить. Кто-нибудь, пожалуйста, помогите!!
Комментарии:
1. Перед отправкой значения в ResultActivity вам нужно присвоить имя mUsername значению, полученному из намерения MainActivity, правильно? Имя пользователя = намерение.getStringExtra(Константы.ИМЯ ПОЛЬЗОВАТЕЛЯ)
2. @pepperlove , Да, извините, я на самом деле делаю это в коде, я забыл вставить это сюда. Но это все равно не работает
3. Можете ли вы получить значение в QuizQuestionActivity?
4. @pepperlove Я не уверен в этом, потому что я просто передаю это через это действие, фактически не показывая его в представлении. Должен ли я проверить это с помощью инструкции Log ?
5. может ли это быть связано с тем, что я использую TextInputLayout вместо редактируемого текста в xml ?
Ответ №1:
У меня есть два замечания в вашем фрагменте кода
1)У вас есть два постоянных файла?
- Константа.кт
- КОНСТАНТА.кт
Как и в вашем QuizQuestionActivity, есть строка
mUsername = intent.getStringExtra(CONSTANTS.USER_NAME)
Независимо от файла, на который вы ссылаетесь, строковые значения поля USER_NAME должны быть одинаковыми.
2)Еще одна вещь в основной деятельности
val Intent = Intent(this, QuizQuestionActivity::class.java)
intent.putExtra(Constants.USER_NAME, name)
startActivity(intent)
Здесь переменная, которую вы используете, — это «Намерение».
val Intent = Intent(this, QuizQuestionActivity::class.java)
и вы передаете «намерение» для начала деятельности
intent.putExtra(Constants.USER_NAME, name)
startActivity(intent)
Попробуйте это
В основной деятельности:
val nameEditText = findViewById<TextInputEditText>(R.id.name_edit_text)
val name = nameEditText.text.toString()
val intent = Intent(this, QuizQuestionActivity::class.java)
intent.putExtra(Constants.USER_NAME, name)
startActivity(intent)
В QuizQuestionActivity:-
var mUsername: String? = null
mUsername = intent.getStringExtra(Constants.USER_NAME)
val intent = Intent(this, ResultActivity::class.java)
intent.putExtra(Constants.USER_NAME, mUsername)
startActivity(intent)
В результате:-
val username = intent.getStringExtra(Constants.USER_NAME)
tv_name.text = username
Комментарии:
1. Да, вы были правы. Возникла проблема с намерением/Намерением, но, к сожалению, решение этой проблемы не решает основную проблему. Имя по-прежнему не отображается на экране результатов. Также использование findViewById<TextInputEditText> вместо <TextInputEditText><EditText> приводит к сбою приложения.