1

So I tried to create multi views recyclerview in kotlin, but sadly it did not work.The recyclerview does not display on the screen. It worth to mention that I tried to set the orientation as vertical in my layout files, also added all the dependencies and things needed. Can anyone please help me with that?

My MainActivity.class


@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
 lateinit var binding: ActivityMainBinding
 lateinit var adapter: NumbersAdapter
 lateinit var recyclerView: RecyclerView
 var list: List<Nums> = listOf(Nums(1,false))

 override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  binding = ActivityMainBinding.inflate(layoutInflater)
  setContentView(binding.root)
  updateAll()
}
 fun updateAll(){
 binding.recyclerview.apply {
  val layoutManager = LinearLayoutManager(this@MainActivity)
  adapter = NumbersAdapter(list)
  adapter = adapter
 }}}

My Adapter

class NumbersAdapter(
var list: List<Nums>,
): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
class RedViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val name = itemView.findViewById<TextView>(R.id.red_number)
fun bindRed(number: Nums) {
name.text = number.nums.toString()
}
}
class OrangeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val name = itemView.findViewById<TextView>(R.id.orange_number)
fun bindOrange(number: Nums) {
name.text = number.nums.toString()
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if (viewType == 0) {
val redvView =
LayoutInflater.from(parent.context).inflate(R.layout.red_item, parent, false)
return RedViewHolder(redvView)
}
 else {
val orangeView =
LayoutInflater.from(parent.context).inflate(R.layout.orange_item, parent, false)
return OrangeViewHolder(orangeView)
}
 }
override fun getItemCount(): Int {
return list.size
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if(getItemViewType(position)==0){
(holder as RedViewHolder).bindRed(list[position])
}
else{
(holder as OrangeViewHolder).bindOrange(list[position])
}
}
override fun getItemViewType(position: Int): Int {
checkItem()
 if(list[position].flag)
 return 0
 return 1
 }
fun checkItem(){
for (i in list.indices) {
 for (k in i + 1 until list.size) {
if (list[i].nums + list[k].nums == 0) {
 list[i].flag = true
 list[k].flag = true
}}}}}
Coding125
  • 21
  • 3

1 Answers1

1

in MainActivity.class change code in updateAll() function

fun updateAll(){
    binding.recyclerView.apply {
        adapter = NumbersAdapter(list)
        layoutManager = LinearLayoutManager(this@MainActivity)
    }
}
hossein
  • 638
  • 1
  • 3
  • 14