Адаптер свойства lateinit не был инициализирован при настройке RecyclerView с фрагментом - PullRequest
0 голосов
/ 25 февраля 2020

У меня проблема с адаптацией RecyclerView к фрагменту. У меня есть Навигационный ящик, который, в свою очередь, имеет TabLayout, и когда я нажимаю на вкладку, я перехожу к этому RecyclerView. У меня нет возможности его адаптировать, теперь я получаю сообщение об ошибке «Адаптер свойства lateinit не был инициализирован», но я пробовал тысячу разных способов.

MainAdapter.kt

class MainAdapter(private val context: Context) : RecyclerView.Adapter<MainAdapter.MainViewHolder>() 
{

private var dataList = mutableListOf<Usuario>()

fun setListData(data:MutableList<Usuario>){
    dataList = data
}

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

override fun getItemCount(): Int {
    return if(dataList.size > 0){
        dataList.size
    }else{
        0
    }
}

override fun onBindViewHolder(holder: MainViewHolder, position: Int) {
    val user = dataList[position]
    holder.bindView(user)
}

inner class MainViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){

    fun bindView(user: Usuario){
        Glide.with(context).load(user.imageUrl).into(itemView.circleImageView)
        itemView.txt_title.text = user.nombre
        itemView.txt_desc.text = user.descripcion 
    }

}
}

FragmentNotification.kt

class NotificacionesFragment : Fragment(){

private lateinit var adapter: MainAdapter
private lateinit var _view: View
private lateinit var rv: RecyclerView


override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    _view = inflater.inflate(R.layout.notificaciones, container, false)
   // val viewPager = x.findViewById<View>(R.id.viewPager) as ViewPager
    rv = _view.findViewById(R.id.rv) as RecyclerView

    rv.adapter = MainAdapter (requireContext())

    _view.rv.layoutManager = LinearLayoutManager(requireContext())
    _view.rv.adapter = adapter

    val dummyList = mutableListOf<Usuario>()
    dummyList.add(Usuario("lala","lala","lala"))

    adapter.setListData(dummyList)
    adapter.notifyDataSetChanged()

    return _view
}
}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020
class NotificacionesFragment : Fragment(){

private lateinit var adapter: MainAdapter
private lateinit var _view: View
private lateinit var rv: RecyclerView


override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    _view = inflater.inflate(R.layout.notificaciones, container, false)
   // val viewPager = x.findViewById<View>(R.id.viewPager) as ViewPager
    rv = _view.findViewById(R.id.rv) as RecyclerView

    adapter = MainAdapter (requireContext())

    _view.rv.layoutManager = LinearLayoutManager(requireContext())
    _view.rv.adapter = adapter

    val dummyList = mutableListOf<Usuario>()
    dummyList.add(Usuario("lala","lala","lala"))

    adapter.setListData(dummyList)
    adapter.notifyDataSetChanged()

    return _view
}
}
0 голосов
/ 25 февраля 2020

Ошибка ясна:

Адаптер свойства lateinit не был инициализирован

Вы никогда не устанавливали это свойство:

private lateinit var adapter: MainAdapter

Вы установили rv.adapter, но не просто adapter. Вы, вероятно, хотели сделать вместо этого:

adapter = MainAdapter (requireContext())
rv.adapter = adapter
...