使用safeargs我得到“找到必需的捆绑包了吗?”

时间:2019-01-31 15:08:22

标签: android kotlin navigation android-safe-args

我正在使用safeargs传递参数。在接收片段中,我收到一个编译错误:“是否找到所需的软件包?”。无法看到错误的根源所在。

在Google中搜索,选中的文字和胆量教程

出现错误的地方(在“参数”处)

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)

参数应该是Bundle,但是Bundle是吗?

4 个答案:

答案 0 :(得分:1)

使用.Quit代替requireArguments()

答案 1 :(得分:0)

我不得不更改它以使用!!

var args = FragmentTwoArgs.fromBundle(arguments !!)

答案 2 :(得分:0)

您不应该使用 DECLARE @nI INTEGER SET @nI = 0 WHILE @nI <= 180 BEGIN INSERT INTO dbo.usertorights( UserID, Name, ID, isDeleted) SELECT @nI, 'student', id_people, false FROM people_table) SET @nI = @nI + 1 END 只需使用:

FragmentTwoArgs.fromBundle(arguments)

在您的方法调用中:

val args: FragmentTwoArgsby navArgs()

这对我有用,请参阅官方指南: https://developer.android.com/topic/libraries/architecture/navigation/navigation-pass-data

答案 3 :(得分:0)

尝试使用requireArguments()代替参数

var args = FragmentTwoArgs.fromBundle(requireArguments())