Bundle 是可以为空的,即使我没有这样声明它

Bundle is nullable even though I haven't declared it as such

class UserFragment : Fragment(), View.OnClickListener {

private val userBinding: FragmentUserBinding by onCreateView<Fragment, FragmentUserBinding>(R.layout.fragment_user)
val user: ObservableField<String> = ObservableField()
private var bundle = Bundle()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    userBinding.main = this
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) = userBinding.root!!

override fun onClick(p0: View?) {
    runAnimation(500L, Techniques.RubberBand, p0)
    Handler().postDelayed({
        saveUserAndStartLetterFragment()
    }, 700L)
}

private fun saveUserAndStartLetterFragment() {
    var fragment = WordpackChooserFragment()
    bundle.putString("User",user.get())
    fragment.arguments = bundle
    activity!!.supportFragmentManager.replaceFragment(fragment, activity!!.findViewById(R.id.flContainer))
}
}

在此片段中,我声明了捆绑包。我没有将其指定为可为空。

class WordpackChooserFragment : Fragment(), View.OnClickListener {

private val wordpackChooserBinding: FragmentWordpackChooserBinding by onCreateView<Fragment, FragmentWordpackChooserBinding>(R.layout.fragment_wordpack_chooser)
private var bundle: Bundle = Bundle()
private lateinit var fragment: Fragment

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    wordpackChooserBinding.main = this
    setRecycler()
    bundle = arguments
    return wordpackChooserBinding.root
}

override fun onClick(v: View?) {
    fragment = RoundsChooserFragment()
    bundle.putStringArrayList("Wordpack", selectedPack)
    fragment.arguments = bundle
    activity!!.supportFragmentManager.replaceFragment(fragment, activity!!.findViewById(R.id.flContainer))
}

private fun setRecycler() {
    wordpackChooserBinding.root.btn_recycler.layoutManager = LinearLayoutManager(this.context)
    wordpackChooserBinding.root.btn_recycler.adapter = BtnAdapter(this)
    wordpackChooserBinding.root.btn_recycler.adapter.notifyDataSetChanged()
}

}

在该片段中,这一行 bundle = arguments 错误如下:

类型不匹配。

必需:捆绑包

找到:捆绑?

我可以使用非空断言运算符'!!'但这似乎是一个黑客。

argumentsnullable(注意 link 描述中的 "if any"),因此您不能简单地将其分配给不可为 null 的 Bundle。你要么处理它是 null(使用 if)的情况,要么使用 !! 或者你可以这样写:

arguments?.let { bundle = it }

但是,我会说它更喜欢使用 let