-2

I have been reading online about RecyclerView in Android. As a beginner, I have seen some online tutorials extend RecyclerView.Adapter<Subclass_RecyclerviewAdapter.ViewHolder> and some RecylerView.Adapter only. Actually, what is the difference between them? which is better?

Athira Reddy
  • 1,004
  • 14
  • 18

1 Answers1

1

If I do this:

class SimpleAdapter : RecyclerView.Adapter() { ... }

then Android Studio says "One type argument expected for class Adapther<VH: RecyclerView.ViewHolder!>". In the source for the RecyclerView, you can see:

public class RecyclerView extends ViewGroup implements ScrollingView,
        NestedScrollingChild2, NestedScrollingChild3 {

    ...

    public abstract static class Adapter<VH extends ViewHolder> { ... }

    ... 

}

That means you have to supply a type to the Adapter constructor (similar to how you don't define a List, but a List<String> for example).

There is a thing to note here, though. You can put RecyclerView.ViewHolder as the type, or you can extend this class and use your custom ViewHolder. This allows you to define custom methods on the ViewHolder, for example:

inner class SimpleViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
    fun bind(text: String) {
        // Bind to the view
    }
}

EDIT: Important thing is, you receive the type you use in the constructor in the adapter methods, for example: override fun onBindViewHolder(holder: SimpleViewHolder, position: Int) { ... }, where you can then use your methods from the custom view holder.

And, you will have to have a custom VH, as the RecyclerView.ViewHolder is abstract.

Adrijan
  • 353
  • 1
  • 10