无法在一台设备上的某些片段上滚动RecyclerView

时间:2015-04-23 16:29:17

标签: android android-viewpager android-recyclerview

我有一些奇怪的问题,现在就注意到了。我有ViewPager有3个片段,使用相同的布局RecyclerView,它适用于我测试的4个设备(Nexus 7,HTC 816,HTC 610和Xperia SP),但它不适用于Nexus S 。

滚动仅在最后一个片段上正常工作,但在前两个片段中,您需要从列表的顶部或底部开始滚动。

这是使用的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_dictionary"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:scrollbars="vertical"
    android:clickable="true"
    android:background="@color/myLightPrimaryColor"
    xmlns:android="http://schemas.android.com/apk/res/android" />

此处只有代码差异:

(这个不起作用)

@Override
    protected void updateDisplay() {
        // get new word count
        newWords    = SharedPrefsHelper.getDictionaryCountDifference(getActivity());
        adapter     = new DictionaryAdapter(listDictionary, getActivity(), newWords);
        recyclerView.setAdapter(adapter);
    }

(这一个)

@Override
    protected void updateDisplay() {
        // sort words by best voted (upvote - downvote)
        Comparator<Dictionary> comparator = new Comparator<Dictionary>() {
            @Override
            public int compare(Dictionary lhs, Dictionary rhs) {
                int leftLike, leftDislike, rightLike, rightDislike;

                if (lhs.getLikes() == null)
                    leftLike = 0;
                else leftLike = Integer.parseInt(lhs.getLikes());

                if (lhs.getDislikes() == null)
                    leftDislike = 0;
                else leftDislike = Integer.parseInt(lhs.getDislikes());

                if (rhs.getLikes() == null)
                    rightLike = 0;
                else rightLike = Integer.parseInt(rhs.getLikes());

                if (rhs.getDislikes() == null)
                    rightDislike = 0;
                else rightDislike = Integer.parseInt(rhs.getDislikes());

                return (rightLike - rightDislike) - (leftLike - leftDislike);
            }
        };

        Collections.sort(listDictionary, comparator);
        adapter = new DictionaryAdapter(listDictionary, getActivity());
        recyclerView.setAdapter(adapter);

我不明白为什么这部分代码会有所作为。

1 个答案:

答案 0 :(得分:1)

好像我没有在正确的地方观看来解决这个问题。ViewPager动画导致了问题,这个问题具体来说:

pager.setPageTransformer(true, new DepthPageTransformer());

这是来自https://github.com/ToxicBakery/ViewPagerTransforms的动画,但其他动作(没有测试所有动画)。它并没有在任何4.1 Android设备上运行,再尝试了一个和模拟器。