当查看寻呼机移动到新页面时,布局向上滚动

时间:2016-11-15 09:01:06

标签: android listview android-viewpager

我的布局包含一个viewpager(在布局的顶部)和一个listview(在pager下面),我使用Runnable类每隔3秒移动到新页面,问题是每当寻呼机移动到新页面,布局向上滚动,以便我可以看到寻呼机。我想阻止向上滚动并保持位置,无论我在哪里。

pageAdapter = new PagerAdapterCustom(getSupportFragmentManager(),
                getApplicationContext(), pics, true, false);
        pager.setAdapter(pageAdapter);
        mIndicator = (CirclePageIndicator) findViewById(R.id.indicatorDetailsNews);

        mIndicator.setViewPager(pager);
        pager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub
                currentPage = arg0;
                //mIndicator.setCurrentItem(arg0);
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub
                //mIndicator.setCurrentItem(arg0);
            }
        });

        final Handler handler = new Handler();

        final Runnable Update = new Runnable() {

            public void run() {
                if (currentPage == NUM_PAGES - 1) {
                    currentPage = -1;
                }
                pager.setCurrentItem(currentPage++, true);
                mIndicator.setCurrentItem(currentPage++);
                pager.setScrollBarFadeDuration(R.styleable.CirclePageIndicator_fillColor);
                // pager.setScrollDurationFactor(4);
            }
        };

        swipeTimer = new Timer();
        swipeTimer.schedule(new TimerTask() {

            @Override
            public void run() {
                handler.post(Update);
            }
        }, 1000, 3000);

2 个答案:

答案 0 :(得分:1)

克诺索斯的答案就是这样,你应该从你的容器Activity,

来管理它

假设您正在使用RecyclerView,每当您检测到您的RecyclerView被滚动时,警告您的活动,您可以执行以下操作:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);

            scrolledValue = dy;

        }
    });

并将scrolledValue向右发送回ContainerActivity。然后,ContanierActivity将通过scrolledValue通知所有其他片段有关更改并滚动其RecyclerViews,无论它是正值还是负值。

为此,我认为你可以使用smoothScrollBy(int dx,int dy),但我还没有尝试过。请参阅documentation

答案 1 :(得分:0)

问题是Fragment内的PagerAdapterCustom不知道其'兄弟Fragment的滚动状态。

所以当你滚动一个时,其他人当然仍然会在顶部。

要解决此问题,您需要做两件事。

  1. 当检测到Fragment内部滚动时,您报告向后滚动回PagerAdapterCustom的所有者。
  2. 当您切换到新的Fragment时,会将当前滚动状态报告给新的Fragment