getArgument из пакета null - PullRequest
       13

getArgument из пакета null

1 голос
/ 08 апреля 2020

Я хочу получить значение пакета аргумента с помощью ключа QUERY, но почему, когда я инициализирую переменную в методе onActivityCreated(), значение не найдено, в чем проблема? ниже я прикрепляю свой код

class SearchFragment : Fragment() {

    private lateinit var filmAdapter: FilmAdapter
    private lateinit var tvShowAdapter: TvShowAdapter
    private lateinit var viewModel: MainViewModel

    private var dataFilm = mutableListOf<FilmModel>()
    private var dataTv = mutableListOf<TvShowModel>()

    companion object{
        const val INDEX = "index"
        const val QUERY = "query"

        fun newInstance(index: Int): SearchFragment {
            val fragment = SearchFragment()
            val bundle = Bundle()
            bundle.putInt(INDEX, index)
            fragment.arguments = bundle

            return fragment
        }

        fun searchInstance(queries: String): SearchFragment {
            val fragment = SearchFragment()
            val bundle = Bundle()
            bundle.putString(QUERY, queries)
            fragment.arguments = bundle
            Log.d(TAG, bundle.getString(QUERY).toString())

            return fragment
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_search, container, false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        listSearch.setHasFixedSize(true)

        filmAdapter = FilmAdapter(dataFilm)
        tvShowAdapter = TvShowAdapter(dataTv)

        listSearch.adapter = filmAdapter
        listSearch.layoutManager = GridLayoutManager(context, 2)

        viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(MainViewModel::class.java)

        viewModel.getSearchFilm().observe(viewLifecycleOwner, Observer {
            if (it != null){
                filmAdapter.setData(it.results)
                showLoading(false)
            }
        })

        viewModel.getSearchTv().observe(viewLifecycleOwner, Observer {
            if (it != null){
                tvShowAdapter.setData(it.results)
                showLoading(false)
            }
        })

        var index = 0
        if (arguments != null){
            index = arguments?.getInt(INDEX, 0) as Int
            val queries = arguments?.getString(QUERY, "") as String
            if (index == 1){
                loadDataTv(queries)
                listSearch.adapter = tvShowAdapter
            }

            loadDataFilm(queries)
        }

    }

    private fun loadDataFilm(query: String){
        viewModel.setSearchFilm(query)
        showLoading(true)
    }

    private fun loadDataTv(query: String) {
        viewModel.setSearchTv(query)
        showLoading(true)
    }

    private fun showLoading(state: Boolean){
        if (progressBar != null){
            if (state){
                progressBar.visibility = View.VISIBLE
            } else {
                progressBar.visibility = View.GONE
            }
        }
    }
}

Мой метод searchInstance(queries: String) вызывает действие и заполняет его параметры, я использую журнал, чтобы увидеть, загружен ли пакет, и оказывается, что пакет заполнен. , но почему, когда я вызываю аргумент для значения onActivityCreate () с ключом QUERY, не существует, но ключ INDEX можно получить

...