Как показать тост-сообщение во фрагменте с использованием модели MVVM - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь показать тост-сообщение во фрагменте, используя событие MutableLiveData, но не могу показать всплывающее сообщение, ошибка:

None of the following functions can be called with the arguments supplied. makeText(Context!, CharSequence!, Int) defined in android.widget.Toast makeText(Context!, Int, Int) defined in android.widget.Toast

ViewModel

class AddProductViewModel (
    private val repository: ProductRepository,
    private val context: Context
): ViewModel(), Observable {

    private  val statusMessage = MutableLiveData<Event<String>>()

    val message : LiveData<Event<String>>
        get() = statusMessage

}

Фрагмент

class AddProductFragment: Fragment() {
    private lateinit var binding: AddProductBinding
    private lateinit var addProductViewModel: AddProductViewModel
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding =  DataBindingUtil.inflate(inflater, R.layout.add_product, container, false)
        val dao = SubscriberDatabase.getInstance(requireActivity().applicationContext).productDAO
        val repository = ProductRepository(dao)
        val factory = AddProductViewModelFactory(repository, requireActivity().applicationContext)
        addProductViewModel = ViewModelProvider(this, factory).get(AddProductViewModel::class.java)
        binding.addProductViewModel = addProductViewModel
        binding.lifecycleOwner = this
        val view = binding.root

        addProductViewModel.message.observe(viewLifecycleOwner, Observer {
            it.getContentIfNotHandled()?.let {
                ***Error is on this line***
                Toast.makeText(viewLifecycleOwner,it, Toast.LENGTH_LONG).show
            }
        })

        return view
    }
}

Как исправить, пожалуйста, заранее спасибо

Спасибо R

1 Ответ

2 голосов
/ 11 июля 2020

Используйте следующую строку для отображения сообщения Toast в Fragment:

 Toast.makeText(context, it, Toast.LENGTH_LONG).show()

Вы используете viewLifecycleOwner в качестве первого аргумента, но это должно быть Context.

...