akiilhan
akiilhan

Reputation: 179

Using RecycleView in fragment Val cannot be reassigned problem

i tried to use recycleview in fragment but i get "val cannot be reassigned" error.I am confused because i didnt give any value, ı used variable. my mainacitvity:

class KategoriFragment : Fragment() {
    var araclarKategori = ArrayList<AracMarka>()

    private lateinit var galleryViewModel: GalleryViewModel

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

        galleryViewModel =
            ViewModelProviders.of(this).get(GalleryViewModel::class.java)
        var root = inflater.inflate(R.layout.fragment_category, container, false)
        rvarackategori = root.findViewById(R.id.rvarackategori) as RecyclerView
        var MyAdapter = AracMarkaAdapter(araclarKategori)
        rvarackategori.adapter = MyAdapter
        veriKaynaginiDoldur()
        return root
    }

    fun veriKaynaginiDoldur(): ArrayList<AracMarka> {

        var aracLogo = arrayOf(R.drawable.opellogo, R.drawable.chevroletlogo)
        var aracismi = resources.getStringArray(R.array.arabaisim)

        for (i in 0..araclarKategori.size - 1) {

            var eklenecekaracKategori = AracMarka(aracismi[i], aracLogo[i])
            araclarKategori.add(eklenecekaracKategori)
        }
        return araclarKategori

    }
}

This is my adapter:

    class AracMarkaAdapter(tumKategori: ArrayList<AracMarka>) :
        RecyclerView.Adapter<AracMarkaAdapter.AracMarkaViewHolder>() {

        var araclar = tumKategori

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AracMarkaViewHolder {

            var inflater = LayoutInflater.from(parent.context)
            var arackategori = inflater.inflate(R.layout.arac_kategori, parent, false)

            return AracMarkaViewHolder(arackategori)

        }

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

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

            holder.aracismi.text=araclar.get(position).aracAdi
            holder.aracLogo.setImageResource(araclar.get(position).aracLogo)

        }   

        class AracMarkaViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

            var teksatirKategori= itemView
            var aracismi= teksatirKategori.tvaracAdi
            var aracLogo=teksatirKategori.img_arac_sembol
}
    }

Upvotes: 0

Views: 825

Answers (1)

Scott Cooper
Scott Cooper

Reputation: 3089

rvarackategori = root.findViewById(R.id.rvarackategori) as RecyclerView

That line is your problem. You've set the RecyclerView id to be @id/rvarackategori, when you create a Fragment in Kotlin you can access views in the layout without using findViewById, you just need to use the id of the view.

So in this case you're accessing rvarackategori by its id, then you are finding the same view using findViewById and trying to assign it to itself.

Try this:

 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        galleryViewModel = ViewModelProviders.of(this).get(GalleryViewModel::class.java)
        return inflater.inflate(R.layout.fragment_category, container, false)
    }

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

        var MyAdapter = AracMarkaAdapter(araclarKategori)
        rvarackategori.adapter = MyAdapter
        veriKaynaginiDoldur()
    }

Upvotes: 1

Related Questions