我想把这个java类转换成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;
}
}
}
很简单哈。我使用 android studio kotlin 工具转换它,结果是
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)
}
但是我在 RecyclerAdapter.ViewHolder 上收到一个错误,上面写着“类 RecyclerAdapter 需要一个类型参数” 谁能帮我解决这个问题?
最佳答案
如果你有像这样的泛型类:
class Adapter<T : Element>
你必须这样调用它:
: RecyclerView.Adapter<Adapter<Element>.ViewHolder>()
这就是问题所在。但是你该怎么办?最简单的想法是在单独的文件(而不是内部类)中创建 ViewHolder 并实现一些绑定(bind)接口(interface)。但您也可以搜索其他解决方案。
例如:https://medium.com/@mohanmanu/generic-adapter-with-kotlin-part-i-74e191d68b0f
关于android - 子类和父类中的 Kotlin 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49665908/