Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带分页3的ViewPager 2在按钮上跳转过多页面单击Kotlin_Android_Kotlin_Android Jetpack_Android Paging Library_Android Paging 3 - Fatal编程技术网

Android 带分页3的ViewPager 2在按钮上跳转过多页面单击Kotlin

Android 带分页3的ViewPager 2在按钮上跳转过多页面单击Kotlin,android,kotlin,android-jetpack,android-paging-library,android-paging-3,Android,Kotlin,Android Jetpack,Android Paging Library,Android Paging 3,我正在使用Viewpager 2和分页库处理无限数据。通过分页源的帮助,我成功地创建了创建无限页面的逻辑。我用按钮在两个方向上滑动单页。我添加了项目的链接 观看的视频链接:- Github来源:- 我遇到的问题 当我慢慢点击上一个按钮时,它会滑动一个页面,但如果我快速点击上一个按钮多次,它开始滚动的次数会比我们点击的次数多,直到我们点击viewpager,它才会停止 main活动 import android.os.Bundle import androidx.activity.viewMode

我正在使用Viewpager 2分页库处理无限数据。通过分页源的帮助,我成功地创建了创建无限页面的逻辑。我用按钮在两个方向上滑动单页。我添加了项目的链接

观看的视频链接:-

Github来源:-

我遇到的问题

当我慢慢点击上一个按钮时,它会滑动一个页面,但如果我快速点击上一个按钮多次,它开始滚动的次数会比我们点击的次数多,直到我们点击viewpager,它才会停止

main活动

import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch

class MainActivity : AppCompatActivity() {
    private val viewModel by viewModels<ViewPagerViewModel>()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val adapter = ViewPagerAdapter()
        viewpager.adapter = adapter
        lifecycleScope.launch {
            viewModel.dataList.collectLatest {
                adapter.submitData(it)
            }
        }

        next.setOnClickListener {
            viewpager.setCurrentItem(viewpager.currentItem.plus(1), true)
        }

        previous.setOnClickListener {
            viewpager.setCurrentItem(viewpager.currentItem.minus(1), true)
        }
    }
}
import android.util.Log
import java.util.*

class ViewPagerDataSource(
    private val pageSize: Int,
    private val currentDate: Date
) {
    fun loadDataSource(pageNumber: Int): List<Date> {

        val dates = mutableListOf<Date>()
        val startingDate = startingDate(pageNumber)
        val tempCalendar = Calendar.getInstance()
        Log.e("startingDate", "" + startingDate)

        tempCalendar.time = startingDate
        val endingDate = endingDate(startingDate)

        Log.e("endingDate", "" + endingDate)

        while (tempCalendar.time < endingDate) {
            dates.add(tempCalendar.time)
            tempCalendar.add(Calendar.DATE, 1)
        }
        return dates
    }

    private fun startingDate(pageNumber: Int): Date {
        Calendar.getInstance().let {
            it.time = currentDate
            it.add(Calendar.DATE, pageNumber * pageSize)
            return it.time
        }
    }

    private fun endingDate(startingDate: Date): Date {
        Calendar.getInstance().let {
            it.time = startingDate
            it.add(Calendar.DATE, pageSize)
            return it.time
        }
    }
}
import androidx.paging.PagingSource
import java.io.IOException
import java.util.*

class ViewPagerPagingSource(
    private val dataSource: ViewPagerDataSource
) :
    PagingSource<Int, Date>() {

    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Date> {
        val position = params.key ?: 0

        return try {
            val data = dataSource.loadDataSource(position)
            LoadResult.Page(
                data = data,
                prevKey = if (data.isEmpty()) null else position - 1,
                nextKey = if (data.isEmpty()) null else position + 1
            )
        } catch (exception: IOException) {
            LoadResult.Error(exception)
        }
    }
}
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.paging.Pager
import androidx.paging.PagingConfig
import java.util.*

class ViewPagerViewModel(app: Application) : AndroidViewModel(app) {

    private val dataSource = ViewPagerDataSource(5, currentDate())

    val dataList =
        Pager(config = PagingConfig(pageSize = 5, enablePlaceholders = true),
            pagingSourceFactory = {
                ViewPagerPagingSource(dataSource)
            }).flow

    private fun currentDate(): Date {
        val calendar = Calendar.getInstance()
        return calendar.time
    }
}