使用安全参数我得到"required Bundle found Bundle?"



我正在使用safeargs传递参数。在接收片段中,我收到一个编译错误:"找到所需的捆绑包?看不到错误从何处蔓延。

谷歌搜索,检查文本和 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(arguments)

参数应该是捆绑包,但捆绑包是捆绑包吗?

我不得不将其更改为使用!

var args = FragmentTwoArgs.fromBundle(arguments!!)

使用

requireArguments() 而不是 arguments!!

尝试使用 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
            }

相关内容

  • 没有找到相关文章

最新更新