繁体   English   中英

LiveData 不会触发从 Fragment 观察它

[英]LiveData doesn't triggered observing it from Fragment

我有一个片段,它观察 ViewModel 中包含的 LiveData 以在 RecyclerView.Adapter 中传递信息。 Fragment 中的 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)
                }
            })
}

有人可以帮助我吗? 提前致谢。

解决了使用此代码加载 ViewModel:

profileViewModel =
        activity?.run { ViewModelProviders.of(this).get(ProfileViewModel::class.java) }
            ?: throw Exception("Invalid Activity")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM