Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何将适配器连接到片段?_Kotlin_Android Recyclerview_Fragment_Adapter - Fatal编程技术网

Kotlin 如何将适配器连接到片段?

Kotlin 如何将适配器连接到片段?,kotlin,android-recyclerview,fragment,adapter,Kotlin,Android Recyclerview,Fragment,Adapter,我在SDK 29中使用Kotlin 我想在我的片段中创建一个recyclerView。当我运行设备时,它不会崩溃,碎片会出现,但不会出现在回收器视图中,我有以下错误: E/RecyclerView:未连接适配器;跳过布局 这是我的密码: 适配器 进口: import android.content.Context import android.text.format.DateUtils import android.view.LayoutInflater import android.view.

我在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.*
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.Navigation
import com.example.givenaskv1.R
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.firebase.firestore.FirebaseFirestore
import kotlinx.android.synthetic.main.fragment_page_profil.*
代码:

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)
        }
    }
}
class FragmentPageProfil : BottomSheetDialogFragment(), OnMapReadyCallback {
    private lateinit var googleMap: GoogleMap
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        readFireStoreData()

    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_page_profil, container, false)

        readFireStoreData()
    }




    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)




        btnProfilOption.setOnClickListener {
            val action = FragmentPageProfilDirections.actionFragmentPageProfil2ToProfilOption()
            Navigation.findNavController(it).navigate(action)
        }


        retourBtnprofil.setOnClickListener {
            val action = FragmentPageProfilDirections.actionFragmentPageProfil2ToNotificationFragment()
            Navigation.findNavController(it).navigate(action)
        }

        btnCalendar.setOnClickListener {
            val action = FragmentPageProfilDirections.actionFragmentPageProfil2ToFragmentCalendrier()
            Navigation.findNavController(it).navigate(action)
        }
        mapProfil.onCreate(savedInstanceState)
        mapProfil.onResume()
        mapProfil.getMapAsync(this)
    }
     override fun onMapReady(map: GoogleMap?) {
        map?.let {
            googleMap = it
        }
    }

    fun readFireStoreData() {
        val db = FirebaseFirestore.getInstance()
        db.collection("users")
            .get()
            .addOnCompleteListener {

                val result: StringBuffer = StringBuffer()

                if(it.isSuccessful) {
                    for(document in it.result!!) {
                        result.append(document.data.getValue("firstName")).append(" ")

                    }
                    nomUtilisateur.setText(result)
                }
            }
    }
    }
代码:

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)
        }
    }
}
class FragmentPageProfil : BottomSheetDialogFragment(), OnMapReadyCallback {
    private lateinit var googleMap: GoogleMap
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        readFireStoreData()

    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_page_profil, container, false)

        readFireStoreData()
    }




    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)




        btnProfilOption.setOnClickListener {
            val action = FragmentPageProfilDirections.actionFragmentPageProfil2ToProfilOption()
            Navigation.findNavController(it).navigate(action)
        }


        retourBtnprofil.setOnClickListener {
            val action = FragmentPageProfilDirections.actionFragmentPageProfil2ToNotificationFragment()
            Navigation.findNavController(it).navigate(action)
        }

        btnCalendar.setOnClickListener {
            val action = FragmentPageProfilDirections.actionFragmentPageProfil2ToFragmentCalendrier()
            Navigation.findNavController(it).navigate(action)
        }
        mapProfil.onCreate(savedInstanceState)
        mapProfil.onResume()
        mapProfil.getMapAsync(this)
    }
     override fun onMapReady(map: GoogleMap?) {
        map?.let {
            googleMap = it
        }
    }

    fun readFireStoreData() {
        val db = FirebaseFirestore.getInstance()
        db.collection("users")
            .get()
            .addOnCompleteListener {

                val result: StringBuffer = StringBuffer()

                if(it.isSuccessful) {
                    for(document in it.result!!) {
                        result.append(document.data.getValue("firstName")).append(" ")

                    }
                    nomUtilisateur.setText(result)
                }
            }
    }
    }
Fragment.xml

你能帮帮我吗?
谢谢大家!

E/RecyclerView:未连接适配器;当适配器没有数据时,可能会发生跳过布局的错误。 将readFireStoreData()函数移动到返回充气机之前的代码 如下图所示

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment

    readFireStoreData()

    return inflater.inflate(R.layout.fragment_page_profil, container, false)
}
你忘了添加layoutManager和方向,仅此而已

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

readFireStoreData()

return inflater.inflate(R.layout.fragment_page_profil, container, false)
}