+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

RecyclerView滚动到指定位置(Kotlin)_51CTO博客_recyclerview滚动到指定位置弹出

/** * RecyclerView滚动到指定位置 */ var mToPosition:Int = 0 // 记录目标项位置 var mShouldScroll:Boolean = false // 目标项是否在最后一个可见项之后 fun smoothMoveToPosition(mRecyclerView: RecyclerView,position:Int){ // 第一个可见位置 var firstItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(0)) // 最后一个可见位置 var lastItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(mRecyclerView.childCount - 1)) if (position < firstItem){ // 如果跳转位置在第一个可见位置之前,就smoothScrollToPosition可以直接跳转 mRecyclerView.smoothScrollToPosition(position) }else if (position <= lastItem){ // 跳转位置在第一个可见项之后,最后一个可见项之前 // smoothScrollToPosition根本不会动,此时调用smoothScrollBy来滑动到指定位置 var movePosition = position - firstItem if (movePosition >= 0 && movePosition<mRecyclerView.childCount){ var top = mRecyclerView.getChildAt(movePosition).top mRecyclerView.smoothScrollBy(0,top) } }else { // 如果要跳转的位置在最后可见项之后,则先调用smoothScrollToPosition将要跳转的位置滚动到可见位置 // 再通过onScrollStateChanged控制再次调用smoothMoveToPosition,执行上一个判断中的方法 mRecyclerView.smoothScrollToPosition(position) mToPosition = position mShouldScroll = true } } 逐条加载recycleview的item,跑马灯效果 rv_diagnosis.scrollToPosition(multList.size - 1) disposable = Flowable.interval(1,1,TimeUnit.SECONDS) .doOnNext { if (it.toInt()>=multList.size){ disposable?.dispose() } // multList[it.toInt()].itemType multListSingle.add(multList[it.toInt()]) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(Consumer { diagnosisAdapter.notifyDataSetChanged() smoothMoveToPosition(rv_diagnosis,it.toInt()) })
你可能想看的