Android Studio KotlinE/回收机视图:未连接适配器;跳过布局(适配器不工作)

vx6bjr1n  于 2022-11-16  发布在  Android
关注(0)|答案(1)|浏览(207)

我在我的应用程序中使用RecyclerView。但是我在Logcat中得到这个错误。这是我的代码;
我的片段

package com.ahmetkaan.kediy.Fragments

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.SearchView
import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
import androidx.recyclerview.widget.StaggeredGridLayoutManager
import com.ahmetkaan.kediy.R
import com.ahmetkaan.kediy.adapter.NotesAdapter
import com.ahmetkaan.kediy.database.NotesDatabase
import com.ahmetkaan.kediy.databinding.FragmentHomeBinding
import com.ahmetkaan.kediy.entities.Notlar
import kotlinx.coroutines.launch
import java.util.*
import kotlin.collections.ArrayList

class Home : BaseFragment() {

    lateinit var binding : FragmentHomeBinding
    var arrNotes = ArrayList<Notlar>()
    var notesAdapter: NotesAdapter = NotesAdapter()

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

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentHomeBinding.inflate(inflater, container, false)
        return binding.root
    }

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

        binding.recyclerView.setHasFixedSize(true)
        binding.recyclerView.layoutManager = StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)

        launch {
            context?.let {
                val notes = NotesDatabase.getDatabase(it).noteDao().getAllNotes()
                notesAdapter.setData(notes)
                arrNotes = notes as ArrayList<Notlar>
                binding.recyclerView.adapter = notesAdapter
            }
        }

        binding.searchView.setOnQueryTextListener( object : SearchView.OnQueryTextListener{
            override fun onQueryTextSubmit(p0: String?): Boolean {
                return true
            }

            override fun onQueryTextChange(p0: String?): Boolean {

                var tempArr = ArrayList<Notlar>()

                for (arr in arrNotes){
                    if (arr.not!!.toLowerCase(Locale.getDefault()).contains(p0.toString())){
                        tempArr.add(arr)
                    }
                }

                notesAdapter.setData(tempArr)
                notesAdapter.notifyDataSetChanged()
                return true
            }

        })

        notesAdapter.setOnClickListener(onClicked)

        binding.notEkle.setOnClickListener {
            val action = HomeDirections.actionHome2ToNotOlustur()
            Navigation.findNavController(requireActivity(), R.id.fragmentContainerView).navigate(action)
        }

        binding.calendar.setOnClickListener {
            val action = HomeDirections.actionHome2ToCalendar2()
            Navigation.findNavController(requireActivity(), R.id.fragmentContainerView).navigate(action)
        }
    }

    private val onClicked = object :NotesAdapter.OnItemClickListener {
        override fun onClicked(notesId: Int) {

            val fragment: Fragment
            val bundle = Bundle()
            bundle.putInt("noteId", notesId)
            fragment = NotOlustur.newInstance()
            fragment.arguments = bundle

            val action = HomeDirections.actionHome2ToNotOlustur()
            Navigation.findNavController(requireActivity(), R.id.fragmentContainerView)
                .navigate(action)
        }
    }
}

我的界面卡

package com.ahmetkaan.kediy.adapter

import android.graphics.BitmapFactory
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.cardview.widget.CardView
import androidx.core.graphics.drawable.toDrawable
import androidx.recyclerview.widget.RecyclerView
import com.ahmetkaan.kediy.R
import com.ahmetkaan.kediy.entities.Notlar
import kotlin.collections.ArrayList

class NotesAdapter() :
    RecyclerView.Adapter<NotesAdapter.NotesViewHolder>() {
    var listener:OnItemClickListener? = null
    var arrList = ArrayList<Notlar>()
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NotesViewHolder {
        return NotesViewHolder(
            LayoutInflater.from(parent.context).inflate(R.layout.item_notlar,parent,false)
        )
    }

    override fun getItemCount(): Int {
        return arrList.size
    }

    fun setData(arrNotesList: List<Notlar>){
        arrList = arrNotesList as ArrayList<Notlar>
    }

    fun setOnClickListener(listener1: OnItemClickListener){
        listener = listener1
    }

    override fun onBindViewHolder(holder: NotesViewHolder, position: Int) {

        holder.itemView.findViewById<TextView>(R.id.theNotC).text = arrList[position].not
        holder.itemView.findViewById<TextView>(R.id.dateTimeC).text = arrList[position].dateTime

        if (arrList[position].impPathBackground != null){
            holder.itemView.findViewById<ImageView>(R.id.backgroundC).setImageBitmap(BitmapFactory.decodeFile(arrList[position].impPathBackground))
        } else {
            holder.itemView.findViewById<ImageView>(R.id.backgroundC).setImageDrawable(R.drawable.ronin.toDrawable())
        }

        if (arrList[position].impPathBackground != null){
            holder.itemView.findViewById<ImageView>(R.id.backgroundC).setImageBitmap(BitmapFactory.decodeFile(arrList[position].impPathLogo))
        } else {
            holder.itemView.findViewById<ImageView>(R.id.backgroundC).setImageDrawable(R.drawable.logo1.toDrawable())
        }

        holder.itemView.findViewById<CardView>(R.id.cardView).setOnClickListener {
            listener!!.onClicked(arrList[position].id!!)
        }

    }

    class NotesViewHolder(view:View) : RecyclerView.ViewHolder(view){

    }

    interface OnItemClickListener{
        fun onClicked(noteId:Int)
    }

}

我在网上搜索了很多,但我不太懂,因为它们都是java语言。即使我尝试了我所理解的,它也不起作用。不像其他人,我使用了CoroutineScope(启动)。我想是因为它,但我不确定。我该怎么办?

nnvyjq4y

nnvyjq4y1#

设置适配器应该在主线程中。但您将其 Package 在launch中。

binding.recyclerView.adapter = notesAdapter

相关问题