Фрагмент внутри фрагмента: сохранение адаптера вида Recycler при нажатии кнопки «Назад» ¿? - PullRequest
2 голосов
/ 30 марта 2020

Первый вопрос в сообществе:)

Я создаю приложение, в котором у меня есть MainActivity и фрагменты везде. Внутри фрагмента у меня есть еще один фрагмент, который имеет RecyclerView. Я загружаю элементы переработчика из Cloud Firebase, и он отлично работает!

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

Например: когда я впервые загружаю этот фрагмент, требуется секунда или две, чтобы получить данные и проанализировать их в объектах и ​​т. Д. c и * c ..., чтобы, наконец, отобразить recyclerView, как я имею в виду. НО, когда я нажимаю кнопку «Назад» и снова вводю фрагмент, это снова занимает 2 секунды (приблизительно).

Можно ли сделать запрос только один раз, сохранить Адаптер (или ответ), а затем установить его снова?

Я читал о onSaveInstanceState (), я читал о SavedInstanceState, я пытался установить счетчик, установить логическое значение, но я все еще не могу найти способ хранить информацию в так, что он все еще жив, когда я закрываю фрагмент.

Надеюсь, что это имеет смысл, заранее спасибо!

РЕДАКТИРОВАТЬ:

fun getObjects(): FirestoreRecyclerAdapter<Object, ObjectViewHolder> {
    val firestore = FirebaseFirestore.getInstance()

    val query = firestore.collection("collectionPath")
    val response = FirestoreRecyclerOptions.Builder<Object>()
        .setQuery(query, Object::class.java).build()

    val adapter = object : FirestoreRecyclerAdapter<Object, ObjectViewHolder>(response) {
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ObjectViewHolder {
            val view = LayoutInflater.from(parent.context).inflate(
                R.layout.element_object,
                parent, false
            )

            return ObjectViewHolder(view)
        }

        override fun onBindViewHolder(holder: ObjectViewHolder, position: Int, object: Object) {
            val title = (position + 1).toString() + ". " + object.title
            holder.itemView.element_object_title.text = title

            val image = holder.itemView.element_object_image
            Picasso.with(holder.itemView.context).load(object.image).into(image)

            holder.object = object
        }

    }
    return adapter
}
...