LiveData не запускается, наблюдая его из фрагмента - PullRequest
0 голосов
/ 17 января 2020

У меня есть фрагмент, который наблюдает за данными LiveData, содержащимися в ViewModel, для передачи информации в RecyclerView.Adapter. LiveData во фрагменте не запускается, но если я перемещаю его в Activity, он запускается.

Вот код:

class ProfileViewModel : ViewModel() {


private val profileLiveData: MutableLiveData<User> = MutableLiveData(

private val followersPreview: LiveData<Query> =
        Transformations.map(profileLiveData) { profile ->usersApi.getFollowers(profile.followers) }

private val followingPreview: LiveData<Query> =
    Transformations.map(profileLiveData) { profile -> usersApi.getFollowing(profile.following) }

fun getProfile(userDocumentId: String): LiveData<User> {
    usersApi.getProfile(userDocumentId)
        .addSnapshotListener { querySnapshot, firebaseFirestoreException ->
            if (firebaseFirestoreException != null) {
                Log.d("Exception get profile", firebaseFirestoreException.message!!)
                // Handle exception
            }
            val profileUser: User = querySnapshot?.toObject(User::class.java)!!
            profileLiveData.value = profileUser
        }
    return profileLiveData
}
fun getProfileFollowers(): LiveData<Query> {
    return followersPreview
}

}

class ListsProfileFragment : Fragment() {

private lateinit var fragmentListsBinding: FragmentListsProfileBinding

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    fragmentListsBinding = FragmentListsProfileBinding.inflate(layoutInflater)
    return fragmentListsBinding.root
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    val profileViewModel = ViewModelProviders.of(this).get(ProfileViewModel::class.java);
    Log.d("Viewmodel", profileViewModel.toString())
    profileViewModel
        .getProfileFollowers()
        .observe(viewLifecycleOwner,
            Observer {
                it.addSnapshotListener { querySnapshot, firebaseFirestoreException ->
                    val followers = mutableListOf<UserPreview>()
                    querySnapshot?.documents?.forEach { doc ->
                        val follower: UserPreview = UserPreview(
                            doc.get("username") as String,
                            doc.get("profileImage") as String
                        )
                        followers.add(follower)
                    }
                    fragmentListsBinding.recyclerViewFollowers.layoutManager =
                        LinearLayoutManager(this.activity, RecyclerView.HORIZONTAL, false)
                    fragmentListsBinding.recyclerViewFollowers.adapter =
                        AccountsAdapter(followers)
                }
            })
}

Кто-нибудь может мне помочь? Заранее спасибо.

1 Ответ

0 голосов
/ 19 января 2020

Решено с помощью этого кода для загрузки ViewModel:

profileViewModel =
        activity?.run { ViewModelProviders.of(this).get(ProfileViewModel::class.java) }
            ?: throw Exception("Invalid Activity")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...