Обязательный аргумент "имя" отсутствует и не имеет android: defaultValue - PullRequest
0 голосов
/ 16 апреля 2020

У меня проблема с моим кодом, я пытаюсь передать аргументы между фрагментами, но при его запуске выдается исключение java.lang.IllegalArgumentException: Required argument "name" is missing and does not have an android:defaultValue. Я все еще новичок, поэтому я не могу точно сказать, откуда проблема.

class ListNotesFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        val binding = DataBindingUtil.inflate<FragmentListNotesBinding>(inflater, R.layout.fragment_list_notes, container, false)

        val application = requireNotNull(this.activity).application

        val args = ListNotesFragmentArgs.fromBundle(arguments!!).name

        val dataSource = NoteDatabase.getInstance(application).noteDatabaseDao

        val viewModelFactory = ListNoteViewModelFactory(args, dataSource)

        val listNoteViewModel = ViewModelProviders.of(this, viewModelFactory).get(ListNoteViewModel::class.java)

        binding.listNoteViewModel = listNoteViewModel

        binding.lifecycleOwner = this

        binding.addButton.setOnClickListener{
            this.findNavController().navigate(R.id.action_listNotesFragment_to_detailNoteFragment)
        }

        listNoteViewModel.navigateToDetailNoteFragment.observe(viewLifecycleOwner, Observer{
            it?.let {
                this.findNavController().navigate(ListNotesFragmentDirections
                    .actionListNotesFragmentToDetailNoteFragment(it.noteId))

                listNoteViewModel.doneNavigating()
            }
        })

        return binding.root
    }

}

1 Ответ

0 голосов
/ 18 апреля 2020

Таким образом, ваша проблема заключается в следующем:

val args = ListNotesFragmentArgs.fromBundle(arguments!!).name

Способ защитить себя от того, когда null , состоит в установке defaultValue в вашем аргументе nav_graph. xml, поэтому он выглядит примерно так:

<argument
    android:name="name"
    app:argType="string"
    app:nullable="true"
    android:defaultValue="@null"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...