RecycleView和Adapter的基本使用
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的基本使用相关推荐
- 打造通用的recycleview的adapter
本人之前也是不喜欢写博客,可是发现好多知识当时知道过了很长时间就会忘记,又得回去找资料看,最近看一些资料,觉得用recycleview每次写adapter 就很麻烦,看了不是的博客,自己也了已个通用的 ...
- RecycleView配合Adapter调用notifyDataSetChanged闪屏?
我们在网上找到的其他方法无非是以下几种简单的 1.设置动画时间 Recycleview.getItemAnimator().setChangeDuration(0); 2.重写getItemId @O ...
- RecycleView加载不同类型的Item
前情提要:去面试一家外企,需求是要重复使用一个布局很多次,单单是布局的话用include就可以了,但是逻辑也要复用,而且提出了使用listview复用条目优化性能,想做成一个自定义控件.我尝试了下,感 ...
- Android RecyclerView设计通用Adapter
RecylerView 的使用频率现在也算做是很高了吧?使用起来的确是挺方便的,也容易实现一些比较好看的效果 一.一般步骤 一般的设计流程都是如下所示 首先是需要一个 JavaBean 来承载数据,包 ...
- RecycleView的正确打开方式
Android界面的丰富多彩都是由于ListView的默默付出,但是需求日益变化,ListView的已经不再好用,并且不再满足"用户日益增长的娱乐需要同落后界面的矛盾",于是乎Go ...
- android 手势操作垂直滑动,Android-水平和垂直方向都可滑动的RecycleView
最近有点忙,项目进度跟的比较紧.最近需求那边让我们写一个左右和上下都可滑动的列表,用来展示多个Title的值.这里我把需求简化了一下.老规矩,先看图. 在看到需求的时候,有在网上看看有没有别人造好的轮 ...
- MVP结合(RecycleView,Retorfit,GreenDao和EventBus)数据展示
代码使用的依赖: compile'org.greenrobot:greendao:3.0.1'compile'org.greenrobot:greendao-generator:3.0.0'compi ...
- Android:RecycleView基本使用(瀑布流)
RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式.它被作为ListView和GridView控件的继承者,在最新的support-V7版本中提供支持. 有了 L ...
- RecycleView简介及基本使用
##RecycleView简介 RecyclerView控件和ListView的原理有很多相似的地方,都是维护少量的View来进行显示大量的数据,不过RecyclerView控件比ListView更加 ...
最新文章
- 随机森林采用多数表决的一种,最终表决结果不是树上的类别(class)频率,而是树上的各类别概率的平均值
- redis 正则匹配value_Redis 获取匹配所有的key
- 华为mate50麒麟处理器鸿蒙系统,华为Mate50Pro:有鸿蒙OS,处理器你选择麒麟还是高通...
- wxWidgets:使用控件
- 视觉传达对中职计算机教育影响,自考视觉传达设计毕业论文:平面设计专业信息化教学资源库建设...
- Oracle 数据库入门学习
- STM8L 库下载地址
- 苹果电脑在哪里改计算机id,苹果MAC电脑如何更改ID账号
- Redis过期策略以及内存淘汰机制
- 关于存储单元、寻址范围的问题
- 用最少数量的剑引爆气球
- JS在VS coder界面写promt和alter语句无法在浏览器页面显示
- 【毕业季·进击的技术er】这三年来的风风雨雨,喜怒哀乐,坎坎坷坷,朝朝暮暮……都是那么美好,那么令人难以忘记。
- python的endswith()的用法及实例
- Java Web程序设计第12章课后第2题
- matplotlib 饼图 plt.pie()
- 恢复视力方法(仅供参考)
- oracle smon 执行记录,Oracle SMON进程中系统监视进程SMON
- 2022新H5拼团抽奖拆盲盒模式源码+功能非常强大
- Sage X3基于业务的预算管理
热门文章
- C++ decltype的使用
- 用计算机随机出数,计算机如何产生随机数?
- iOS 命令行安装app - ideviceinstaller
- Unity实战篇:Buff系统设计(二:具体代码和实战使用)
- Shader Graph18-反射、折射函数
- php mysql prepare_php mysqli prepare使用实例介绍
- php中间件,php中间件 (middleware)
- 【数据库】join的用法和场景(包含非等值于非等值)
- php请假审核怎么建立数据库,php – 请假申请月报
- 查看mysql的所有用户和权限