У меня есть активность с макетом с вкладками, содержащим несколько разных вкладок. Каждая вкладка содержит ряд полей 'edittext'. У меня есть кнопка в основном действии, и при нажатии на нее я хочу сохранить содержимое каждого поля edittext с каждой вкладки. В настоящее время я могу вернуть обычное значение с вкладки, но не могу получить содержимое поля edittext.
Я попытался создать «lateinit var frag1_tenNo: EditText» в классе фрагментов для вкладки. Я инициализировал его в onCreateView, но программа вылетает, говоря: «свойство lateinit frag1_tenNo не было инициализировано».
код фрагмента
class frag1: Fragment() {
lateinit var frag1_tenNo : EditText
override public fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val viewFrag1 = inflater.inflate(R.layout.frag1, container, false)
frag1_tenNo = viewFrag1.findViewById(R.id.survey_tenantNo)
return viewFrag1
}
fun saveFrag1Data(): String {
var data1 = frag1_tenNo.text.toString()
return data1
}
код активности - для получения данных
save_btn.setOnClickListener {
Log.d("Survey","Change Button Clicked")
val test = frag1().saveFrag1Data()
Log.d("Survey","Returned value : $test")
}
val test = frag1().saveFrag1Data()
Здесь вы создаете новый фрагмент. OnCreate
метод этого фрагмента еще не вызывается. Так что вполне предсказуемо вы получите ошибку lateinit property frag1_tenNo has not been initialized
.
@ConorSproule Это зависит от вашей реализации. Вам необходимо получить доступ к экземплярам фрагментов, которые вы ранее создали.
хорошо, Эндрю, теперь это может быть выше моего понимания, я только новичок в программировании и борюсь с терминами. Я не думаю, что у вас есть ссылка на ответ, который мог бы направить меня к решению этой проблемы/доступу к экземплярам созданных фрагментов?
Я отсортировал это сейчас, я не мог заставить findViewById работать, потому что каждый раз создавал новый фрагмент. теперь я использую его с контейнером, в котором был надут фрагмент. работает нормально.
спасибо, теперь это имеет смысл. как мне получить доступ к полю edittext на вкладке из моей основной деятельности, чтобы получить любой текст, который я ввел?