RecyclerView上的LinearLayoutManager的scrollToPositionWithOffset无法正常工作

时间:2015-11-11 11:36:16

标签: android android-recyclerview linearlayoutmanager

我试图使用RecyclerView制作粘性图片的水平列表,并且我希望按像素移动它们'偏移scrollToPositionWithOffset。我认为将0作为position传递,将我想要移动的像素作为offset传递给右/左。

但它不起作用,列表保持不变,未展开,它不会移动。这是我的实施:

final LargeImageAdapter mLargeImageAdapter = new LargeImageAdapter(this);
linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(mLargeImageAdapter);

seekBar = (SeekBar)findViewById(R.id.seekBar);
seekBar.setMax(7000);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        int scrollToDX = progress;

        ((LinearLayoutManager)recyclerView.getLayoutManager()).scrollToPositionWithOffset(0, scrollToDX);
        // tried invoking also linearLayoutManager instead getLayoutManager.
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
});

我做错了什么?

非常感谢。

问候。

圣拉斐尔。

3 个答案:

答案 0 :(得分:3)

我终于使用了:

@patch('json.dump') @patch('builtins.open', new_callable=mock_open()) def test_save_data_to_file(self, m, m_json): self.mc.save_data_to_file(self.data) # simple assertion that your open was called m.assert_called_with('/tmp/data.json', 'w') # assert that you called m_json with your data m_json.assert_called_with(self.data, m.return_value.__enter__.return_value) 设置recyclerView.scrollBy(int offsetX, int offsetY);,现在可以正常使用。

我不明白函数offsetY = 0的效用是什么。

答案 1 :(得分:2)

我有类似的问题。我的问题是我的recyclerview与其父布局的大小不同。我通过将回收者视图宽度和高度设置为match_parent来解决它。我不知道为什么会发生这种情况。

答案 2 :(得分:0)

对你的第一个问题的迟到答案,以及对答案的补充:

您的方法可以更好地满足您的个人需求,因为scrollToPositionWithOffset无意做您想做的事。

作为doc says here

  

[...]已解决的布局开始取决于[...]   getLayoutDirection(android.view.View)[...]

这意味着它将在布局方向上垂直偏移滚动目标位置,在您的情况下垂直。

  

我不明白该功能的用途是什么   scrollToPositionWithOffset。

它不仅可以滚动到列表中的给定项目,还可以将其放置在更“可见”或方便的位置。