布局充气器不充气视图
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 中的图片)初始化您的适配器。如果您希望适配器显示您的项目列表,您需要一些方法来更新适配器当前持有的列表以上是关于布局充气器不充气视图的主要内容,如果未能解决你的问题,请参考以下文章