IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android MVVM+RecyclerView+SwipeRefreshLayout实现下拉刷新和上滑加载更多 -> 正文阅读

[移动开发]Android MVVM+RecyclerView+SwipeRefreshLayout实现下拉刷新和上滑加载更多

请添加图片描述

引入

    //ViewModel的创建
    implementation 'androidx.activity:activity-ktx:1.1.0'//by viewModels
    implementation 'androidx.fragment:fragment-ktx:1.2.5'//by viewModels

    //
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"//下拉刷新

    //https://github.com/CymChad/BaseRecyclerViewAdapterHelper
    implementation "com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4"//适配器的封装

View

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private val viewModel by viewModels<MainViewModel> { MainViewModelFactory() }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        initView()
        initData()
    }

    private fun initData() {
        //获取初始数据
        viewModel.getInitData()
        //初始化适配器
        val myAdapter2 = MyAdapter2(R.layout.recycler_main)
        //上滑动加载更多
        myAdapter2.loadMoreModule.setOnLoadMoreListener {
            Log.d(TAG, "initData: load more data")
            binding.rlRefresh.postDelayed({
                //获取更多数据
                viewModel.getMoreData()
                //停止加载更多动画
                myAdapter2.loadMoreModule.loadMoreComplete()
            }, 1000)
        }
        //data发生变化的监听
        viewModel.dataList.observe(this, Observer {
            Log.d(TAG, "initData: 数据发生改变")
            if (!viewModel.isLoadMore) {
                myAdapter2.data = it
                binding.rvRecycle.adapter = myAdapter2
                binding.rvRecycle.layoutManager =
                    LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
            } else {
                myAdapter2.addData(it)
            }
        })
    }

    private fun initView() {
        //设置颜色
        //binding.rlRefresh.setColorSchemeColors(Color.RED)
        //下拉刷新初始数据
        binding.rlRefresh.setOnRefreshListener {
            Log.d(TAG, "initView: refresh data ")
            binding.rlRefresh.postDelayed({
                //获取初始化数据
                viewModel.getInitData()
                //停止动画
                binding.rlRefresh.isRefreshing = false
            }, 1000)
        }
    }

}

ViewModel

class MainViewModel(private var repository: MainRepository) : ViewModel() {

    var isLoadMore = false
    var dataList = MutableLiveData<MutableList<String>>()
    private var pageId = 0

    fun getInitData() {
        isLoadMore = false
        pageId = 0
        dataList.value = repository.getData(page = pageId)
    }

    fun getMoreData() {
        isLoadMore = true
        dataList.value = repository.getData(page = ++pageId)
    }

}

@Suppress("UNCHECKED_CAST")
class MainViewModelFactory : ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return MainViewModel(MainRepositoryProvider.getInstance()) as T
    }
}

Model

interface MainRepository {
    fun getData(page: Int): MutableList<String>
}

class MainRepositoryImp : MainRepository {
    override fun getData(page: Int): MutableList<String> {
        val list = mutableListOf<String>()
        for (i in 0..9) {
            list.add((i + page * 10).toString())
        }
        return list
    }
}

object MainRepositoryProvider {
    fun getInstance(): MainRepository {
        return MainRepositoryImp()
    }
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 12:02:26  更:2021-09-01 12:04:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/25 6:20:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码