布局充气器不充气视图

Posted

技术标签:

【中文标题】布局充气器不充气视图【英文标题】:Layout inflater is not inflating view 【发布时间】:2021-11-13 10:26:29 【问题描述】:

我觉得在这段代码中我的布局没有被附加。我通过 toast,log.d 验证但没有任何效果。这里我用于回收视图视图持有者。代码如下

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder 
    val view = LayoutInflater.from(mContext).inflate(R.layout.posts_layout,parent,false)
    return ViewHolder(view)

和 onBindViewHolder.I 用户登录以检查此方法是否正在使用但未使用

override fun onBindViewHolder(holder: ViewHolder, position: Int) 
    firebaseUser = FirebaseAuth.getInstance().currentUser!!
    Log.d("binded", true.toString())
    val post = mPost[position]
    getPublisherInfo(holder.profileImage ,holder.userName , holder.userFullName ,post.getpublisher())
    Glide.with(mContext).load(post.getpostId()).placeholder(R.drawable.image).into(holder.postImage)

我还检查了我的列表大小 id 是否为 0。因为它使用了已用日志,它显示的列表大小为 5,这是正确的。这意味着我的数据正在从数据库中检索。所以它认为我的布局充气机不工作。它的代码是。

private fun readPosts() 
    val postsRef = FirebaseDatabase.getInstance().reference.child("Posts")
    postsRef.addValueEventListener(object : ValueEventListener
        @SuppressLint("NotifyDataSetChanged")
        override fun onDataChange(snapshot: DataSnapshot) 
            postList.clear()
            for(snapshot in snapshot.children)
                val post = snapshot.getValue(Post::class.java)
                for (uid in (followingList as ArrayList<String>)) 
                    if (post!!.getpublisher().equals(uid)) 
                        postList.add(post)
                    
                    Log.d("added", postList.size.toString())
                    Log.d("added", postList.toString())
                    postAdapter.notifyDataSetChanged()
                
            
        

        override fun onCancelled(error: DatabaseError) 

    )

我的整个适配器代码是

package com.u_me_pro.free.Adapters

class PostAdapter(private val mContext: Context,private val mPost: List<Post>) :
RecyclerView.Adapter<PostAdapter.ViewHolder>() 

private lateinit var firebaseUser : FirebaseUser


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder 
    val view = LayoutInflater.from(mContext).inflate(R.layout.posts_layout,parent,false)
    Log.d("attached layout","true")
    return ViewHolder(view)


 class ViewHolder(@NonNull itemView: View) : RecyclerView.ViewHolder(itemView)
    var description: TextView = itemView.findViewById(R.id.description)
    var userName: TextView = itemView.findViewById(R.id.user_name_post)
    var userFullName: TextView = itemView.findViewById(R.id.user_full_name_post)
    var commentCount: TextView = itemView.findViewById(R.id.comment_count)
    var likeCount: TextView = itemView.findViewById(R.id.love_count)
    var profileImage: RoundedImageView = itemView.findViewById(R.id.user_profile_image_post)
    var postImage: RoundedImageView = itemView.findViewById(R.id.post_image)
    var like: CardView = itemView.findViewById(R.id.post_image_like)
    var comment: CardView = itemView.findViewById(R.id.post_image_comment)
    var save: CardView = itemView.findViewById(R.id.post_image_save)




override fun onBindViewHolder(holder: ViewHolder, position: Int) 
    firebaseUser = FirebaseAuth.getInstance().currentUser!!
    Log.d("binded", true.toString())
    val post = mPost[position]
    getPublisherInfo(holder.profileImage ,holder.userName , holder.userFullName ,post.getpublisher())
    Glide.with(mContext).load(post.getpostId()).placeholder(R.drawable.image).into(holder.postImage)


override fun getItemCount(): Int 
    return mPost.size


private fun getPublisherInfo(profileImage: RoundedImageView, userName: TextView, userFullName: TextView, publisherId: String) 
    val usersRef = FirebaseDatabase.getInstance().reference.child("Users").child(publisherId)
    Log.d("publisher id",publisherId)
    usersRef.addValueEventListener(object :ValueEventListener
        override fun onDataChange(snapshot: DataSnapshot) 
            if (snapshot.exists())
                val user = snapshot.getValue(User::class.java)
                userName.text = user!!.getFullname()
                userFullName.text = user.getFullname()
                Glide.with(mContext).load(user.getImage()).placeholder(R.drawable.profile).into(profileImage)
            
        
        override fun onCancelled(error: DatabaseError) 
            Log.d(TAG, error.getMessage());
        
    )


请尽快帮助我。 谢谢!

【问题讨论】:

我在阅读您的代码时注意到的唯一一件事是您正在 postList 变量中添加帖子,但您正在使用 mPost[position] 读取单个帖子,因此来自不同的变量.您是否以某种方式将 postList 的值分配给 mPost?如果没有,这可能是它无法按预期工作的原因 我猜我不是i.stack.imgur.com/as95v.png i.stack.imgur.com/aFpuG.png 但我在两个不同的文件中使用它们!!一个在适配器中,另一个在我的片段中 好的,尝试将 mPost[position] 更改为 postList[position]。应该这样做 但该变量存在于我的片段中。不在我的适配器中 【参考方案1】:

您正在更新帖子列表并通知适配器更改,但似乎您实际上并未将更新后的列表传递给适配器。

postAdapter.notifyDataSetChanged()

如果适配器中的实际数据没有改变,则不会做任何事情。

您应该在适配器中添加一种更新帖子列表的方法,例如

fun setPostData(posts: List<Post>) 
    this.adapterPosts = posts
    notifyDataSetChanged() // Either call this here or where you were before

这还需要您创建一个新变量来保存传入的列表

private var adapterPosts = mPosts

【讨论】:

我无法理解。 对不起!让我知道您希望我澄清哪一部分,我会尽力对其进行编辑以使其更易于理解!基本上我想说的是,您正在使用一个空列表(基于您的一个 cmets 中的图片)初始化您的适配器。如果您希望适配器显示您的项目列表,您需要一些方法来更新适配器当前持有的列表

以上是关于布局充气器不充气视图的主要内容,如果未能解决你的问题,请参考以下文章

加载应用程序时布局充气器错误

在 Android 中获取布局充气器的正确方法是啥?

如何在给定上下文的情况下获取布局充气器?

Android Wear 圆形模拟器充气方形布局

是否可以在其他应用程序中充气 RemoteViews?

ViewStub 在有条件地膨胀多个布局时引发错误