Reputation: 6187
I want to convert this java class to kotlin
package com.mkhaleghy.cinema.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.mkhaleghy.cinema.R;
import com.mkhaleghy.cinema.daylist.Movie;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class RecyclerAdapter<T extends Element> extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
public RecyclerAdapter(Context context) {
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return null;
}
@Override
public int getItemViewType(int position) {
return 0;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 10;
}
public class ViewHolder extends RecyclerView.ViewHolder {
View itemView;
public ViewHolder(View itemView) {
super(itemView);
this.itemView = itemView;
}
}
}
so simple ha. I use android studio kotlin tools to convert it and the result is
class RecyclerAdapter<T : Element>(context: Context) : RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return null
}
override fun getItemViewType(position: Int): Int {
return 0
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
s
return 10
}
inner class ViewHolder(internal var itemView: View) : RecyclerView.ViewHolder(itemView)
}
but I get an error on RecyclerAdapter.ViewHolder that says "one type argument expected for class RecyclerAdapter" can anyone help me with that?
Upvotes: 2
Views: 1913
Reputation: 1061
Remove <> and your problem will be solved
class EmployeeAdapter(context: Context) : RecyclerView.Adapter<EmployeeAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getItemCount(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
inner class ViewHolder(internal var itemView: View) : RecyclerView.ViewHolder(itemView)
}
Upvotes: 0
Reputation: 1210
If you have generic class like:
class Adapter<T : Element>
Than you have to call it like:
: RecyclerView.Adapter<Adapter<Element>.ViewHolder>()
That is the problem. But what should you do? The easiest idea is to create ViewHolder in seperate file (not as inner class) and implement some binding interface. But you can search for other solutions as well.
See this for example: https://medium.com/@mohanmanu/generic-adapter-with-kotlin-part-i-74e191d68b0f
Upvotes: 1