最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

RecyclerView滑動到指定Position的方法

 更新時間:2017年04月06日 17:16:34   作者:陸羽_  
這篇文章主要為大家詳細(xì)介紹了RecyclerView滑動到指定Position的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Question

最近在寫 SideBar 的時候遇到一個問題,當(dāng)執(zhí)行 Recyclerview 的 smoothScrollToPosition(position) 的時候,Recyclerview 看上去并沒有滾動到指定位置。

Analysis

當(dāng)然,這并不是方法的bug,而是 smoothScrollToPosition(position) 的執(zhí)行效果有三種情況,需要區(qū)分。

·目標(biāo)position在第一個可見項(xiàng)之前 。

這種情況調(diào)用smoothScrollToPosition能夠平滑的滾動到指定位置,并且置頂。

·目標(biāo)position在第一個可見項(xiàng)之后,最后一個可見項(xiàng)之前。

這種情況下,調(diào)用smoothScrollToPosition不會有任何效果···

·目標(biāo)position在最后一個可見項(xiàng)之后。

這種情況調(diào)用smoothScrollToPosition會把目標(biāo)項(xiàng)滑動到屏幕最下方···

Solution

鑒于這三種情況,我想大多數(shù)情況下都無法滿足我們的滑動要求。為了實(shí)現(xiàn) Recyclerview 把指定 item 滑動到屏幕頂端的需求,我們需要對上面三種情況分別處理。

 /** 目標(biāo)項(xiàng)是否在最后一個可見項(xiàng)之后*/
 private boolean mShouldScroll;
 /** 記錄目標(biāo)項(xiàng)位置*/
 private int mToPosition;

 /**
 * 滑動到指定位置
 * @param mRecyclerView
 * @param position
 */
 private void smoothMoveToPosition(RecyclerView mRecyclerView, final int position) {
 // 第一個可見位置
 int firstItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(0));
 // 最后一個可見位置
 int lastItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(mRecyclerView.getChildCount() - 1));

 if (position < firstItem) {
 // 如果跳轉(zhuǎn)位置在第一個可見位置之前,就smoothScrollToPosition可以直接跳轉(zhuǎn)
 mRecyclerView.smoothScrollToPosition(position);
 } else if (position <= lastItem) {
 // 跳轉(zhuǎn)位置在第一個可見項(xiàng)之后,最后一個可見項(xiàng)之前
 // smoothScrollToPosition根本不會動,此時調(diào)用smoothScrollBy來滑動到指定位置
 int movePosition = position - firstItem;
 if (movePosition >= 0 && movePosition < mRecyclerView.getChildCount()) {
 int top = mRecyclerView.getChildAt(movePosition).getTop();
 mRecyclerView.smoothScrollBy(0, top);
 }
 }else {
 // 如果要跳轉(zhuǎn)的位置在最后可見項(xiàng)之后,則先調(diào)用smoothScrollToPosition將要跳轉(zhuǎn)的位置滾動到可見位置
 // 再通過onScrollStateChanged控制再次調(diào)用smoothMoveToPosition,執(zhí)行上一個判斷中的方法
 mRecyclerView.smoothScrollToPosition(position);
 mToPosition = position;
 mShouldScroll = true;
 }
 }

再通過onScrollStateChanged控制再次調(diào)用smoothMoveToPosition

 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
 @Override
 public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
 super.onScrollStateChanged(recyclerView, newState);
 if (mShouldScroll){
  mShouldScroll = false;
  smoothMoveToPosition(mRecyclerView,mToPosition);
 }
 }
 });
 }

目前這個解決方法有兩個已知的問題

1、當(dāng)目標(biāo)項(xiàng)在最后一個可見項(xiàng)之后的時候,由于我們先執(zhí)行smoothScrollToPosition方法,然后在OnScrollListener中執(zhí)行smoothMoveToPosition方法,在滑動的時候不夠連貫。
2、在手動滑動的時候執(zhí)行該方法,會有極小的概率滑動的位置出現(xiàn)偏差。
如果你有更好解決辦法,希望不吝指教。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android掛斷電話最新實(shí)現(xiàn)方法

    Android掛斷電話最新實(shí)現(xiàn)方法

    大家好,本篇文章主要講的是Android掛斷電話最新實(shí)現(xiàn)方法,感興趣的同學(xué)感快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Android APP性能優(yōu)化分析

    Android APP性能優(yōu)化分析

    這篇文章主要給大家講了Android APP性能優(yōu)化相關(guān)的思考以及優(yōu)化重點(diǎn)分析,需要的朋友參考下吧。
    2017-12-12
  • Kotlin文件讀寫與SharedPreferences存儲功能實(shí)現(xiàn)方法

    Kotlin文件讀寫與SharedPreferences存儲功能實(shí)現(xiàn)方法

    SharedPreferences是安卓平臺上一個輕量級的存儲類,用來保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時,將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時,再從SharedPreferences中將值取出
    2022-12-12
  • Android使用BottomNavigationBar實(shí)現(xiàn)底部導(dǎo)航欄

    Android使用BottomNavigationBar實(shí)現(xiàn)底部導(dǎo)航欄

    這篇文章主要為大家詳細(xì)介紹了Android使用BottomNavigationBar實(shí)現(xiàn)底部導(dǎo)航欄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Android實(shí)現(xiàn)EditText換行自動縮進(jìn)功能

    Android實(shí)現(xiàn)EditText換行自動縮進(jìn)功能

    在很多需要輸入多行文本的應(yīng)用(如記事本、編程代碼編輯器、博客編輯器等)中,自動縮進(jìn)功能能大大提升用戶的編輯效率與體驗(yàn),本文給大家介紹了Android實(shí)現(xiàn)EditText換行自動縮進(jìn)功能,下面提供整合后的完整代碼示例,需要的朋友可以參考下
    2025-04-04
  • Android仿QQ長按刪除彈出框功能示例

    Android仿QQ長按刪除彈出框功能示例

    對于列表來說,如果想操作某個列表項(xiàng),一般會采用長按彈出菜單的形式,默認(rèn)的上下文菜單比較難看,而QQ的上下文菜單就人性化多了,整個菜單給用戶一種氣泡彈出的感覺,而且會顯示在手指按下的位置,接下來通過本文給大家分享Android仿QQ長按刪除彈出框功能,一起看看吧
    2017-03-03
  • Android自定義WaveProgressView實(shí)現(xiàn)水波紋加載需求

    Android自定義WaveProgressView實(shí)現(xiàn)水波紋加載需求

    這篇文章主要為大家詳細(xì)介紹了Android自定義WaveProgressView實(shí)現(xiàn)水波紋加載需求,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 常見Android選項(xiàng)菜單樣式集合

    常見Android選項(xiàng)菜單樣式集合

    這篇文章主要為大家分享了一份屬于你自己的常見Android菜單樣式集合,方便大家開發(fā)使用Android菜單,對OptionMenu感興趣的小伙伴們可以參考一下
    2016-02-02
  • Android開發(fā)實(shí)現(xiàn)撥打電話與發(fā)送信息的方法分析

    Android開發(fā)實(shí)現(xiàn)撥打電話與發(fā)送信息的方法分析

    這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)撥打電話與發(fā)送信息的方法,結(jié)合實(shí)例形式分析了Android撥打電話及發(fā)送信息相關(guān)布局、功能實(shí)現(xiàn)及權(quán)限控制操作技巧,需要的朋友可以參考下
    2017-12-12
  • Android藍(lán)牙服務(wù)啟動流程分析探索

    Android藍(lán)牙服務(wù)啟動流程分析探索

    這篇文章主要介紹了Android藍(lán)牙服務(wù)啟動流程,了解內(nèi)部原理是為了幫助我們做擴(kuò)展,同時也是驗(yàn)證了一個人的學(xué)習(xí)能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會的
    2023-01-01

最新評論

大渡口区| 龙游县| 上林县| 金门县| 辉县市| 西盟| 栖霞市| 伊宁县| 凤台县| 钟山县| 连南| 洮南市| 微博| 永昌县| 辽宁省| 阿瓦提县| 大洼县| 洛川县| 井陉县| 岳池县| 宁津县| 三明市| 城步| 成安县| 五指山市| 营山县| 葫芦岛市| 泾川县| 三原县| 望江县| 灵寿县| 洛阳市| 扎赉特旗| 军事| 惠安县| 平定县| 十堰市| 定远县| 宜章县| 明光市| 凤凰县|