PagerSlidingTabs中的Android RecyclerView列表重叠

时间:2016-04-21 11:49:07

标签: android android-fragments android-pageradapter pagerslidingtabstrip

我目前在我的pagerslidingtabs上遇到一些奇怪的事情,其中​​我在recyclerview中的列表被覆盖了相同的视图,除了顶视图不可滚动且背景中的列表可滚动但覆盖。这只是随机发生的,不能轻易复制。只有当我从一个页面快速更改/快速扫描到另一个页面时才会发生这种情况,但如上所述,很难复制相同的问题。这是它的样子:

enter image description here

现在我拥有的是PagerSlidingTabStrip和FragmentPagerAdapter,其中包含带有recyclelerviews列表的片段。我非常确定问题不在于recyclerview列表,而是在使用Pager本身,因为我猜它会创建片段视图,而之前的视图尚未被删除,从而触发此效果。我确保为我的项目创建一个新的片段实例。这是迄今为止的代码:

public class ResultPagerAdapter extends FragmentPagerAdapter {

    private final String[] TITLES = { "TAB", "TAB2" };

    public ResultPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return TITLES[position];
    }

    @Override
    public int getCount() {
        return TITLES.length;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return Page1.newInstance(position);
            case 1:
                return Page2.newInstance(position);
        }
    }

}

并初始化PagerSlidingTabStrip:

private void initializeTabs() {
        //initialize pager
        adapter = new ResultPagerAdapter(getSupportFragmentManager());
        pager.setAdapter(adapter);

        tabs.setDividerColor(getResources().getColor(android.R.color.transparent));
        tabs.setUnderlineColor(getResources().getColor(R.color.red));
        tabs.setIndicatorColor(getResources().getColor(R.color.blue));
        tabs.setIndicatorHeight(new Utils().dpToPx(48));
        tabs.setUnderlineHeight(new Utils().dpToPx(4));
        tabs.setTextColor(getResources().getColor(R.color.white));
        tabs.setViewPager(pager);
    }

和寻呼机代码:

public class CustomViewPager extends ViewPager {

    private boolean enabled;

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.enabled = true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (this.enabled) {
            return super.onTouchEvent(event);
        }

        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (this.enabled) {
            return super.onInterceptTouchEvent(event);
        }

        return false;
    }

    public void setPagingEnabled(boolean enabled) {
        this.enabled = enabled;
    }
}

以及我的片段中newInstance的代码,它调用数据的Web服务:

public static SenatorsResult newInstance(int position) {
        SenatorsResult f = new SenatorsResult();
        Bundle b = new Bundle();
        b.putInt(ARG_POSITION, position);
        f.setArguments(b);
        return f;
    }

之前有人遇到过这个问题吗?希望有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

尝试使用FragmentStatePagerAdapter而不是FragmentPagerAdapter。

访问http://www.truiton.com/2013/05/android-fragmentstatepageradapter-example/了解详情