我的布局包含一个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);
答案 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
的滚动状态。
所以当你滚动一个时,其他人当然仍然会在顶部。
要解决此问题,您需要做两件事。
Fragment
内部滚动时,您报告向后滚动回PagerAdapterCustom
的所有者。Fragment
时,会将当前滚动状态报告给新的Fragment
。