1.创建布局文件,word_fragment用来放Recycle,word_fragment_grad_cell用来放小单元

word_fragment布局:

word_fragment_grad_cell布局:(卡片布局)

2.创建适配器wordFragmentAdapter类

package com.example.ngsl.wordFragmentimport android.content.Intent
import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.example.ngsl.R
import com.example.ngsl.room.Word
import kotlinx.android.synthetic.main.word_fragment_grad_cell.view.*//适配器:告诉view有哪些内容,并且如何填充view
class WordFragmentAdapter : ListAdapter<Word, MyViewHolder>(DiffCallBack) {//比较器,比较每一行的对象object DiffCallBack : DiffUtil.ItemCallback<Word>() {override fun areItemsTheSame(oldItem: Word, newItem: Word): Boolean {//比较是不是同一个对象return oldItem.wordId == newItem.wordId}override fun areContentsTheSame(oldItem: Word, newItem: Word): Boolean {//比较内容是否相同return oldItem == newItem}}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {//加载view,就是每一个小单元word_fragment_grad_cellval view = LayoutInflater.from(parent.context).inflate(R.layout.word_fragment_grad_cell, parent, false)val holder = MyViewHolder(view)holder.itemView.apply {//将监听事件放在这,就不会每次加载一个item时新创建监听事件val onClickListener = View.OnClickListener {val uri = Uri.parse("https://m.youdao.com/dict?le=eng&q=${this.textViewEnglish.text}")Intent(Intent.ACTION_VIEW).apply {this.data = uriholder.itemView.context.startActivity(this)}}this.textViewEnglish.setOnClickListener(onClickListener)this.imageView.setOnClickListener(onClickListener)}return holder}override fun onBindViewHolder(holder: MyViewHolder, position: Int) {//加载资源holder.itemView.apply {val item = getItem(position)this.textViewWordId.text = item.wordId.toString()this.textViewEnglish.text = item.english}}
}//这个很重要
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)

3.在wordFragment中加载适配器

fragment最好在onActivityCreated中操作

package com.example.ngsl.wordFragmentimport android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager
import com.example.ngsl.R
import kotlinx.android.synthetic.main.word_fragment.*class WordFragment : Fragment() {//ViewModel 管理数据的private lateinit var viewModel: WordViewModeloverride fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.word_fragment, container, false)}override fun onActivityCreated(savedInstanceState: Bundle?) {super.onActivityCreated(savedInstanceState)//创建适配器val wordFragmentAdapter = WordFragmentAdapter()recycleView.apply {adapter = wordFragmentAdapter//页面布局,1列layoutManager = GridLayoutManager(requireContext(), 1)}//ViewModelviewModel = ViewModelProvider(this).get(WordViewModel::class.java)viewModel.allWord.observe(viewLifecycleOwner, Observer {//为适配器提供数据wordFragmentAdapter.submitList(it)})//这是一个小功能,可以拖动列表的item
//        ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.START) {//            override fun onMove(
//                recyclerView: RecyclerView,
//                viewHolder: RecyclerView.ViewHolder,
//                target: RecyclerView.ViewHolder
//            ): Boolean {//                return false
//            }
//
//            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {//                //滑动之后要做的事
//                val itemPosition = viewHolder.adapterPosition //获取被删除对象的位置
//                //更新列表数据
//            }
//        }).attachToRecyclerView(recycleView)}
}

4.GitHub源码链接

整个项目有很多组件,只看你需要的部分:https://github.com/YDDUONG/NGSL-English
如果觉得有用,点个赞吧

RecycleView和Adapter的基本使用相关推荐

  1. 打造通用的recycleview的adapter

    本人之前也是不喜欢写博客,可是发现好多知识当时知道过了很长时间就会忘记,又得回去找资料看,最近看一些资料,觉得用recycleview每次写adapter 就很麻烦,看了不是的博客,自己也了已个通用的 ...

  2. RecycleView配合Adapter调用notifyDataSetChanged闪屏?

    我们在网上找到的其他方法无非是以下几种简单的 1.设置动画时间 Recycleview.getItemAnimator().setChangeDuration(0); 2.重写getItemId @O ...

  3. RecycleView加载不同类型的Item

    前情提要:去面试一家外企,需求是要重复使用一个布局很多次,单单是布局的话用include就可以了,但是逻辑也要复用,而且提出了使用listview复用条目优化性能,想做成一个自定义控件.我尝试了下,感 ...

  4. Android RecyclerView设计通用Adapter

    RecylerView 的使用频率现在也算做是很高了吧?使用起来的确是挺方便的,也容易实现一些比较好看的效果 一.一般步骤 一般的设计流程都是如下所示 首先是需要一个 JavaBean 来承载数据,包 ...

  5. RecycleView的正确打开方式

    Android界面的丰富多彩都是由于ListView的默默付出,但是需求日益变化,ListView的已经不再好用,并且不再满足"用户日益增长的娱乐需要同落后界面的矛盾",于是乎Go ...

  6. android 手势操作垂直滑动,Android-水平和垂直方向都可滑动的RecycleView

    最近有点忙,项目进度跟的比较紧.最近需求那边让我们写一个左右和上下都可滑动的列表,用来展示多个Title的值.这里我把需求简化了一下.老规矩,先看图. 在看到需求的时候,有在网上看看有没有别人造好的轮 ...

  7. MVP结合(RecycleView,Retorfit,GreenDao和EventBus)数据展示

    代码使用的依赖: compile'org.greenrobot:greendao:3.0.1'compile'org.greenrobot:greendao-generator:3.0.0'compi ...

  8. Android:RecycleView基本使用(瀑布流)

    RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式.它被作为ListView和GridView控件的继承者,在最新的support-V7版本中提供支持. 有了 L ...

  9. RecycleView简介及基本使用

    ##RecycleView简介 RecyclerView控件和ListView的原理有很多相似的地方,都是维护少量的View来进行显示大量的数据,不过RecyclerView控件比ListView更加 ...

最新文章

  1. 随机森林采用多数表决的一种,最终表决结果不是树上的类别(class)频率,而是树上的各类别概率的平均值
  2. redis 正则匹配value_Redis 获取匹配所有的key
  3. 华为mate50麒麟处理器鸿蒙系统,华为Mate50Pro:有鸿蒙OS,处理器你选择麒麟还是高通...
  4. wxWidgets:使用控件
  5. 视觉传达对中职计算机教育影响,自考视觉传达设计毕业论文:平面设计专业信息化教学资源库建设...
  6. Oracle 数据库入门学习
  7. STM8L 库下载地址
  8. 苹果电脑在哪里改计算机id,苹果MAC电脑如何更改ID账号
  9. Redis过期策略以及内存淘汰机制
  10. 关于存储单元、寻址范围的问题
  11. 用最少数量的剑引爆气球
  12. JS在VS coder界面写promt和alter语句无法在浏览器页面显示
  13. 【毕业季·进击的技术er】这三年来的风风雨雨,喜怒哀乐,坎坎坷坷,朝朝暮暮……都是那么美好,那么令人难以忘记。
  14. python的endswith()的用法及实例
  15. Java Web程序设计第12章课后第2题
  16. matplotlib 饼图 plt.pie()
  17. 恢复视力方法(仅供参考)
  18. oracle smon 执行记录,Oracle SMON进程中系统监视进程SMON
  19. 2022新H5拼团抽奖拆盲盒模式源码+功能非常强大
  20. Sage X3基于业务的预算管理

热门文章

  1. C++ decltype的使用
  2. 用计算机随机出数,计算机如何产生随机数?
  3. iOS 命令行安装app - ideviceinstaller
  4. Unity实战篇:Buff系统设计(二:具体代码和实战使用)
  5. Shader Graph18-反射、折射函数
  6. php mysql prepare_php mysqli prepare使用实例介绍
  7. php中间件,php中间件 (middleware)
  8. 【数据库】join的用法和场景(包含非等值于非等值)
  9. php请假审核怎么建立数据库,php – 请假申请月报
  10. 查看mysql的所有用户和权限