RecycleView和Adapter的基本使用

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

word_fragment布局:

word_fragment_grad_cell布局:(卡片布局)

2.创建适配器wordFragmentAdapter类

package com.example.ngsl.wordFragment

import 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_cell
        val 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 = uri
                    holder.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.wordFragment

import 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: WordViewModel

    override 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)
        }

        //ViewModel
        viewModel = 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
如果觉得有用,点个赞吧

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值