迁移到kotlin-onbind在kotlin类中存在未解决的引用错误

k0pti3hp  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(157)

我正在将一些代码从java迁移到kotlin,我不是这两种语言的Maven。
在大多数情况下,我一直在利用AndroidStudio的translate to kotlin功能,然后检查并修复任何bug。
现在我正在迁移一个回收器视图,我有一些java代码如下所示:

  1. Java
  2. @Override
  3. public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
  4. ((VideoPlayerViewHolder)viewHolder).onBind(vods.get(i), requestManager);
  5. }

我特别关注上面的.onbind(vods.get(i),requestmanager),因为在代码翻译成kotlin之后,我在onbind上遇到了一个未解决的引用错误。

  1. override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, i: Int) {
  2. (viewHolder as VideoPlayerViewHolder).onBind(vods[i], requestManager)
  3. }

所以我想知道如何解决这个错误。Kotlin似乎没有自动处理。有人能告诉我更多关于这里发生的事情吗。这里是完整的文件也。
谢谢

  1. Java
  2. public class VideoPlayerRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  3. private ArrayList<VOD> vods;
  4. private RequestManager requestManager;
  5. public VideoPlayerRecyclerAdapter(ArrayList<VOD> vods, RequestManager requestManager) {
  6. this.vods = vods;
  7. this.requestManager = requestManager;
  8. }
  9. @NonNull
  10. @Override
  11. public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
  12. return new VideoPlayerViewHolder(
  13. LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_video_list_item, viewGroup, false));
  14. }
  15. @Override
  16. public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
  17. ((VideoPlayerViewHolder)viewHolder).onBind(vods.get(i), requestManager);
  18. }
  19. @Override
  20. public int getItemCount() {
  21. return vods.size();
  22. }
  23. }
  1. Kotlin
  2. abstract class VideoPlayerRecyclerAdapter(
  3. vods: ArrayList<VOD>,
  4. requestManager: RequestManager
  5. ) :
  6. RecyclerView.Adapter<RecyclerView.ViewHolder?>() {
  7. private val vods: ArrayList<VOD>
  8. private val requestManager: RequestManager
  9. override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): RecyclerView.ViewHolder {
  10. return VideoPlayerViewHolder(
  11. LayoutInflater.from(viewGroup.context)
  12. .inflate(R.layout.vod_item, viewGroup, false)
  13. )
  14. }
  15. override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, i: Int) {
  16. (viewHolder as VideoPlayerViewHolder).onBind(vods[i], requestManager)
  17. }
  18. init {
  19. this.vods = vods
  20. this.requestManager = requestManager
  21. }
  22. }
  1. ViewHolder
  2. public class VideoPlayerViewHolder extends RecyclerView.ViewHolder {
  3. FrameLayout media_container;
  4. TextView title;
  5. ImageView thumbnail, volumeControl;
  6. ProgressBar progressBar;
  7. View parent;
  8. RequestManager requestManager;
  9. public VideoPlayerViewHolder(@NonNull View itemView) {
  10. super(itemView);
  11. parent = itemView;
  12. media_container = itemView.findViewById(R.id.media_container);
  13. thumbnail = itemView.findViewById(R.id.thumbnail);
  14. title = itemView.findViewById(R.id.title);
  15. progressBar = itemView.findViewById(R.id.progressBar);
  16. }
  17. public void onBind(MediaObject mediaObject, RequestManager requestManager) {
  18. this.requestManager = requestManager;
  19. parent.setTag(this);
  20. title.setText(mediaObject.getTitle());
  21. this.requestManager
  22. .load(mediaObject.getThumbnail())
  23. .into(thumbnail);
  24. }
  25. }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题