Обновить данные в RecyclerView во фрагменте с данными из другого фрагмента - PullRequest
0 голосов
/ 23 марта 2019

У меня есть AllMoviesActivity и два фрагмента. Первый - MovieFragment, а другой - UpdateMovieFragment.

Я показываю все фильмы в формате RecyclerView в MovieFragment. Структура Movie модели класса:

class Movie() : Parcelable {
    var movieID: String? = ""
    var movieName: String? = ""
    var movieImage: Uri? = null
    ...
}

Всякий раз, когда я нажимаю ImageView элемента Movie в RecyclerView, он переходит к UpdateMovieFragment, где я выбираю изображение для фильма и вводю название фильма. Я делаю переход от MovieFragment до UpdateMovieFragment из класса MovieAdapter, устанавливая Предмет Фильма как Аргумент Фрагмента.

val fragment = UpdateMovieFragment()
            val bundle = Bundle()
            bundle.putParcelable("movie", allMovies[p1])
            fragment.arguments = bundle
            val transaction = (activity as FragmentActivity).supportFragmentManager.beginTransaction()
            transaction.addToBackStack(null)
            transaction.replace(R.id.frame_layout, fragment).commit()

Теперь я устанавливаю текущее время как MovieID для каждого фильма, чтобы сохранить его уникальность, чтобы я мог обновить этот конкретный элемент фильма на RecyclerView Позже.

Теперь я использую кнопку меню в упражнении для операции отправки обоих фрагментов. При каждом нажатии кнопки отправки я проверяю, какой фрагмент отображается на дисплее. Если это UpdateMovieFragment, то моя цель - вернуть обновленный фильм в MovieFragment.

override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        return when (item.itemId) {
            R.id.action_save -> {
                val fragment = supportFragmentManager.findFragmentById(R.id.list_fragment_container)
                when (fragment) {
                    is UpdateMovieFragment -> {
                        supportFragmentManager.popBackStack()

                        val fragmentNew = supportFragmentManager.findFragmentByTag("LIST")
                        if (fragmentNew is MovieFragment) {
                            fragmentNew.refreshMovies(fragment.movie)
                        } else {
                            CommonMethods().showToast(applicationContext, "UpdateMovieFragment")
                        }
                    }

                    is MovieFragment -> {
                        CommonMethods().showToast(applicationContext, "Do nothing for now")
                    }
                }
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }

Здесь я не получаю обновленный фильм в MovieFragment. Для метода refreshMovies я делаю это:

fun refreshMovies(movie: Movie) {
        for (i in 0 until movieItems.size) {
            val secondItem = movieItems[i]

            if (movie.movieID == secondItem.movieID) {
                rankItems[i] = rankItem
                break
            }
        }

        itemAdapter.notifyDataSetChanged()
    }

Как лучше всего это решить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...