RecyclerView自動滑動到指定位置存在的Bug

【問題】
一般來說我們會使用RecyclerView的smoothScrollToPosition(int position) 方法來實現(xiàn)自動滾動袁余,但是這個方法最大的問題就是艇抠,一旦目標(biāo)position的item出現(xiàn)在屏幕中仿村,列表就不會繼續(xù)滾動闸餐,這也就造成了一種“BUG”:如果目標(biāo)position的item原本處于列表下方鲤孵,且沒有在屏幕中出現(xiàn)瘩欺,調(diào)用smoothScrollToPosition(int position)方法蜘腌,會導(dǎo)致目標(biāo)position的item滑動到屏幕下方最后一個可見位置的時候就停止滑動沫屡,在大多數(shù)需求中,這并不是我們想要的效果撮珠。

【解決方法】
這是在StackOverflow上找到的解決辦法:

  RecyclerView.SmoothScroller  smoothScroller =    new LinearSmoothScroller(this){

 @Override

  protected int getVerticalSnapPreference() {

    return LinearSmoothScroller.SNAP_TO_START;
    }
 };

 LinearLayoutManager mManager = new LinearLayoutManager(context);

 smoothScroller.setTargetPosition(position);

 mManager.startSmoothScroll(smoothScroller);

【核心代碼】

  /**
 * @Author Lee
 * @Time 2018/3/8
 * @Theme 列表自動滑動到指定的position
 */

public class ScrollToTopActivity extends AppCompatActivity {

private RecyclerView mRv;
private TestDataAdapter mAdapter;
private ArrayList<String> datas = new ArrayList<>();
private ImageView mIvTop;
private RecyclerView.SmoothScroller smoothScroller;
private LinearLayoutManager mManager;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activit_scroll_to_top);
    initView();

}

private void initView() {

    mRv = findViewById(R.id.recylerview);
    mIvTop = findViewById(R.id.iv_top);

    for (int i = 0; i < 100; i++) {

        datas.add(i, "數(shù)據(jù)" + i);
    }

    mAdapter = new TestDataAdapter(this, datas);
    mManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    mRv.setLayoutManager(mManager);
    mRv.setAdapter(mAdapter);

    smoothScroller = new LinearSmoothScroller(this) {

        @Override

        protected int getVerticalSnapPreference() {

            return LinearSmoothScroller.SNAP_TO_START;

        }

    };

    LinearLayoutManager mManager = new LinearLayoutManager(this);




    mIvTop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            //  Toast.makeText(ScrollToTopActivity.this, "回到頂部", Toast.LENGTH_SHORT).show();
           //  mRv.smoothScrollToPosition(10);

            smoothScroller.setTargetPosition(10);

            mManager.startSmoothScroll(smoothScroller);
        }
    });

   }
 }

【xml 布局】

  <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recylerview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

<RelativeLayout
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/iv_top"
        android:layout_width="50dp"
        android:layout_marginRight="@dimen/margin_10dp"
        android:layout_marginBottom="@dimen/margin_10dp"
        android:layout_height="50dp"
        android:src="@mipmap/icon_guide_dot"
        android:tooltipText="h"
        />

    </RelativeLayout>
 </RelativeLayout>

【來源】 http://www.reibang.com/p/c61083ff2c2e

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沮脖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子芯急,更是在濱河造成了極大的恐慌勺届,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娶耍,死亡現(xiàn)場離奇詭異免姿,居然都是意外死亡,警方通過查閱死者的電腦和手機榕酒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門胚膊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奈应,你說我怎么就攤上這事澜掩。” “怎么了杖挣?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵肩榕,是天一觀的道長。 經(jīng)常有香客問我惩妇,道長株汉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任歌殃,我火速辦了婚禮乔妈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘氓皱。我一直安慰自己路召,他們只是感情好勃刨,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著股淡,像睡著了一般身隐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唯灵,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天贾铝,我揣著相機與錄音,去河邊找鬼埠帕。 笑死垢揩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的敛瓷。 我是一名探鬼主播叁巨,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呐籽!你這毒婦竟也來了俘种?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤绝淡,失蹤者是張志新(化名)和其女友劉穎宙刘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牢酵,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡悬包,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了馍乙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片布近。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丝格,靈堂內(nèi)的尸體忽然破棺而出撑瞧,到底是詐尸還是另有隱情,我是刑警寧澤显蝌,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布预伺,位于F島的核電站,受9級特大地震影響曼尊,放射性物質(zhì)發(fā)生泄漏酬诀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一骆撇、第九天 我趴在偏房一處隱蔽的房頂上張望瞒御。 院中可真熱鬧,春花似錦神郊、人聲如沸肴裙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜻懦。三九已至鲸匿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阻肩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工运授, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烤惊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓吁朦,卻偏偏與公主長得像柒室,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逗宜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容