Изменения данных Cloud Firestore перенаправляют на другой фрагмент - PullRequest
0 голосов
/ 11 марта 2020

Я использую Cloud Firestore в моем android приложении. У меня есть три коллекции: users, events и notifications. У меня есть домашняя страница (HomepageFragment) в приложении, которая загружает данные из коллекции events, и у меня есть OnCompleteListener, прикрепленный к данным. У меня также есть профиль (ProfileFragment), в котором я могу следить за пользователями. Странно то, что когда я подписываюсь / отписываюсь от пользователя, ProfileFragment закрывается и появляется HomepageFragment, но он полностью создается с нуля, потому что функция onCreateView запускается каждый раз. Следующее / отписаться от действия редактировать users коллекцию, а не events.

HomepageFragment код:

class HomepageFragment : Fragment() {

    private lateinit var homepageBinding: FragmentHomepageBinding
    private lateinit var homepageViewModel: HomepageViewModel
    private lateinit var homepageSkeleton: Skeleton
    var loggedUser: String? = null
    var loggedUserFollowing: ArrayList<String>? = null
    private lateinit var swipeContainer: SwipeRefreshLayout


    companion object {
        fun newInstance(): HomepageFragment = HomepageFragment()
    }


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

        homepageBinding = FragmentHomepageBinding.inflate(layoutInflater)
        homepageViewModel = run { ViewModelProviders.of(this).get(HomepageViewModel::class.java) }

        loggedUserFollowing = MyApplication.following as ArrayList<String>

        loggedUser = MyApplication.username

        homepageBinding.toolbarHomepage.title.text = "Homepage"

        return homepageBinding.root
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        homepageSkeleton = homepageBinding.recyclerViewHomepage.createSkeleton(showShimmer = true)
        homepageSkeleton.showSkeleton()

        loadHomepageEvents()
        swipeContainer = homepageBinding.swipeContainer
        swipeContainer.setOnRefreshListener {
            swipeContainer.isRefreshing = true
            loadHomepageEvents()
        }

    }

    private fun loadHomepageEvents() {
        homepageViewModel
            .getHomepageEvents()
            .observe(viewLifecycleOwner,
                Observer {
                    homepageBinding.recyclerViewHomepage.layoutManager =
                        LinearLayoutManager(context, RecyclerView.VERTICAL, false)
                    homepageBinding.recyclerViewHomepage.adapter =
                        HomepageAdapter(it, homepageSkeleton, context as FragmentActivity)
                    swipeContainer.isRefreshing = false
                })
    }

}

HomepageViewModel код:

class HomepageViewModel : ViewModel() {

    private val eventsApi: EventsApi = EventsApi()


    private val followingEventsLiveData: MutableLiveData<List<Event>> = MutableLiveData()

    fun getHomepageEvents(): LiveData<List<Event>> {
        Log.d("reload events", "reload")
        val events = eventsApi.getUserHomepageEvents()
        events
            .addOnCompleteListener { querySnapshot ->
                followingEventsLiveData.value =
                    createEventsFromQuerySnapshot(querySnapshot.result)!!
            }
        return followingEventsLiveData
    }
}

Любое предложение? Заранее спасибо.

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