Хорошо, поэтому, когда вы выбираете другой элемент из счетчика, ваш фрагмент не узнает об этом, пока вы не передадите данные во фрагмент. Так что для информирования фрагмента вы можете реализовать интерфейс, если хотите. Или мой любимый, вы можете использовать библиотеку EventBus для передачи данных.
Я покажу вам, как вы можете реализовать EventBus.
Во-первых, добавьте EventBus Dependency в файл Gradle:
implementation 'org.greenrobot:eventbus:3.1.1'
Хорошо, теперь создайте класс данных для передачи данных, скажем SpinnerData:
data class SpinnerData(val selectedItem:String)
Затем внутри вашего приемника itemSelected передайте данные, используя EventBus:
spn.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
// bundle.putString("afp",spn.selectedItem.toString())
//insted add following line
EventBus.getDefault().post(SpinnerData(spn.selectedItem.toString()))
}
override fun onNothingSelected(parent: AdapterView<*>) { }
}
Затем внутри вашегоValcuotaDataFragment добавляет следующее:
@Subscribe
fun listenItemChange(spinnerData: SpinnerData){
if (spinnerData.selectedItem == "something") {
doSomething()
} else {
doSomethingElse()
}
}
override fun onStart() {
super.onStart()
EventBus.getDefault().register(this)
}
override fun onStop() {
EventBus.getDefault().unregister(this)
super.onStop()
}
Теперь, когда вы меняете элемент счетчика, Evenbus будет запускаться и передавать данные методу Subscribeed внутри вашего фрагмента.
Надеюсь, это поможет, позвольте мнезнать, если вы застряли где-то.
Редактировать:
Это не будет работать, если ваш фрагмент еще не инициализирован.
Так что держите свою линию внутри вашего элемента. Выбранный слушатель для первого использования:
bundle.putString("afp",spn.selectedItem.toString())