Я использую 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
}
}
Любое предложение? Заранее спасибо.