Используя safeargs, я получаю "Обязательный Bundle найден Bundle?"
Я передаю аргументы, используя safeargs. В получающем фрагменте я получаю ошибку компиляции: 'Required Bundle Found Bundle?'. Не могу видеть, где ошибка закралась.
Погуглил, проверил текст и учебник по Udacity
Где появляется ошибка (в "аргументах")
package com.example.android.naveditoryoutube
import android.arch.lifecycle.ViewModelProviders
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.android.synthetic.main.fragment_two_fragment.*
class FragmentTwo : Fragment() {
companion object {
fun newInstance() = FragmentTwo()
}
private lateinit var viewModel: FragmentTwoViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_two_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(FragmentTwoViewModel::class.java)
}
override fun onStart() {
super.onStart()
var args = FragmentTwoArgs.fromBundle(arguments)
argText.text = args.calculated_Number
}
}
Код отправки:
package com.example.android.naveditoryoutube
import android.arch.lifecycle.ViewModelProviders
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import androidx.navigation.Navigation
import kotlinx.android.synthetic.main.fragment_one_fragment.*
class FragmentOne : Fragment() {
companion object {
fun newInstance() = FragmentOne()
}
private lateinit var viewModel: FragmentOneViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_one_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(FragmentOneViewModel::class.java)
var calculated_Number : String = viewModel.sendNewNumber().toString()
button_calculate.setOnClickListener{view: View ->
if (number_box.text.isNotEmpty()){
var number_entered: String = number_box.text.toString()
viewModel.findNewNumber((number_entered))
calculated_Number = viewModel.sendNewNumber()
Navigation.findNavController(view).navigate(FragmentOneDirections.actionFragmentOneToFragmentTwo(calculated_Number))
}
}
}
}
Здесь появляется ошибка var args = FragmentTwoArgs.fromBundle(аргументы)
аргументами, как ожидается, будет Bundle, но является ли Bundle?
2 ответа
Я должен был изменить это, чтобы использовать!!
var args = FragmentTwoArgs.fromBundle (аргументы!!)
Попробуйте использовать requireArguments() вместо аргументов
var args = FragmentTwoArgs.fromBundle(requireArguments())
Вы не должны использовать FragmentTwoArgs.fromBundle(arguments)
просто используйте:
val args: FragmentTwoArgsby navArgs()
И в вашем методе вызова:
val amount = args.amount
Это работа для меня, см. Официальное руководство: https://developer.android.com/topic/libraries/architecture/navigation/navigation-pass-data
Вместо того
var args = FragmentTwoArgs.fromBundle(arguments)
argText.text = args.calculated_Number
ты можешь использовать
arguments?.let {
val args = FragmentTwoArgs.fromBundle(it)
argText.text = args.calculated_Number
}