微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在片段中附加适配器?

如何解决如何在片段中附加适配器?

我在 SDK 29 中使用 Kotlin。

我想在我的片段中创建一个 recyclerView。当我运行设备时,它没有崩溃,片段出现但没有出现回收站视图,我有以下错误

E/RecyclerView:没有连接适配器;跳过布局

这是我的代码

适配器

导入:

import android.content.Context
import android.text.format.DateUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.givenaskv1.R
import kotlinx.android.synthetic.main.item_post.view.*

代码

class PostsAdapter (val context: Context,val posts : List<Post>) :
    RecyclerView.Adapter<PostsAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): ViewHolder {
        val view = LayoutInflater.from(context).inflate(R.layout.item_post,parent,false)
        return ViewHolder(view)
    }

    override fun getItemCount() = posts.size
    override fun onBindViewHolder(holder: ViewHolder,position: Int) {
        holder.bind(posts[position])
    }

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun bind(post: Post) {
            itemView.tvUsername.text = post.user?.firstName
            itemView.tvDescription.text = post.description
            Glide.with(context).load(post.imageUrl).into(itemView.ivPost)
            itemView.tvRelativeTime.text = DateUtils.getRelativeTimeSpanString(post.creationTimeMs)
        }
    }
}

片段

导入:

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.linearlayoutmanager
import com.example.givenaskv1.R
import com.example.givenaskv1.models.Post
import com.example.givenaskv1.models.PostsAdapter
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.firestore.Query
import kotlinx.android.synthetic.main.fragment_flux.*

代码

private const val TAG = "Flux"
@Suppress("UNREACHABLE_CODE")
class Flux : Fragment() {

    private lateinit var firestoreDb : FirebaseFirestore
    private lateinit var posts : MutableList<Post>
    private lateinit var adapter: PostsAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
    
    ): View? {


        // Inflate the layout for this fragment
       return inflater.inflate(R.layout.fragment_flux,container,false)

        posts = mutablelistof()
        adapter = PostsAdapter(requireContext(),posts)
        rvPosts.adapter = adapter
        rvPosts.layoutManager = linearlayoutmanager(requireContext())


        firestoreDb = FirebaseFirestore.getInstance()
        val postsReference = firestoreDb.collection("post")
            // .limit() indique le nombre de post MAXIMIM a afficher en même temps,pour éviter le lagg
            .limit(20)
            // .orderBy() filtre selon le critère choisi (ici par ordre chonologique)
            .orderBy("creation_time_ms",Query.Direction.DESCENDING)

        postsReference.addSnapshotListener{ snapshot,exception ->

            if (exception != null || snapshot == null) {
                Log.e(TAG,"Exception when querying posts",exception)
                return@addSnapshotListener
            }
            val postList = snapshot.toObjects(Post::class.java)

            posts.clear()
            posts.addAll(postList)
            adapter.notifyDataSetChanged()


            for (post in postList) {
                Log.i(TAG,"Post ${post}")
            }
        }
    }

片段.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Flux.Flux">

    <androidx.recyclerview.widget.RecyclerView
    android:id="@+id/rvPosts"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
  app:layoutManager="androidx.recyclerview.widget.linearlayoutmanager"
    android:orientation="vertical"
    />

</LinearLayout>

你能帮帮我吗?谢谢!

解决方法

您应该在 onCreateView

的末尾返回视图
    override fun onCreateView(
        inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
    
    ): View? {


        // Inflate the layout for this fragment
       val view =  inflater.inflate(R.layout.fragment_flux,container,false)

        posts = mutableListOf()
        adapter = PostsAdapter(requireContext(),posts)
        rvPosts = view.findViewById<RecyclerView>(R.id.rvPosts)
        rvPosts.layoutManager = LinearLayoutManager(requireContext())
        rvPosts.adapter = adapter


        firestoreDb = FirebaseFirestore.getInstance()
        val postsReference = firestoreDb.collection("post")
            // .limit() indique le nombre de post MAXIMIM a afficher en même temps,pour éviter le lagg
            .limit(20)
            // .orderBy() filtre selon le critère choisi (ici par ordre chonologique)
            .orderBy("creation_time_ms",Query.Direction.DESCENDING)

        postsReference.addSnapshotListener{ snapshot,exception ->

            if (exception != null || snapshot == null) {
                Log.e(TAG,"Exception when querying posts",exception)
                return@addSnapshotListener
            }
            val postList = snapshot.toObjects(Post::class.java)

            posts.clear()
            posts.addAll(postList)
            adapter.notifyDataSetChanged()


            for (post in postList) {
                Log.i(TAG,"Post ${post}")
            }
        }

        return view
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。