- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试同步两个 ViewPager
,因为在我之前显然有很多人,我已经做到了这一点:
private ViewPager mNavPager;
private ViewPager mMainPager;
private final OnPageChangeListener mNavPagerListener = new OnPageChangeListener() {
private boolean mNavDragging;
private int mScrollPosition;
@Override
public void onPageSelected(int position) {
mScrollPosition = position;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(mNavDragging)
mMainPager.scrollTo(positionOffsetPixels, 0);
}
@Override
public void onPageScrollStateChanged(int state) {
switch(state) {
case ViewPager.SCROLL_STATE_DRAGGING:
case ViewPager.SCROLL_STATE_SETTLING:
mNavDragging = true;
break;
case ViewPager.SCROLL_STATE_IDLE:
mNavDragging = false;
break;
}
}
};
private OnPageChangeListener mMainPagerListener = new OnPageChangeListener() {
private boolean mMainDragging;
private int mScrollPosition;
@Override
public void onPageSelected(int position) {
mScrollPosition = position;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(mMainDragging)
mNavPager.scrollTo(positionOffsetPixels, 0);
}
@Override
public void onPageScrollStateChanged(int state) {
switch(state) {
case ViewPager.SCROLL_STATE_DRAGGING:
case ViewPager.SCROLL_STATE_SETTLING:
mMainDragging = true;
break;
case ViewPager.SCROLL_STATE_IDLE:
mMainDragging = false;
break;
}
}
};
如果其中一个是手动滚动的,则另一个将使用滚动状态属性从属于它。在元素到达最终位置之前,它会很好地工作;此时,从属寻呼机立即弹回到先前选择的项目,就好像滚动没有发生一样。
我试过使用各种不同的逻辑约束调用 ViewPager#setCurrentItem(mScrolledPosition)
但这也不起作用,尽管它偶尔会使情况变得更糟。我觉得好像一定有什么可以用它做的,但我不确定是什么。
如何让从属寻呼机保持在正确的位置?
最佳答案
我使用 OnPageChangeListener 以更简单(更清晰)的方式解决了这个问题:
mViewPager1.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
private int mScrollState = ViewPager.SCROLL_STATE_IDLE;
@Override
public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) {
if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
return;
}
mViewPager2.scrollTo(mViewPager1.getScrollX(), mViewPager2.getScrollY());
}
@Override
public void onPageSelected(final int position) {
}
@Override
public void onPageScrollStateChanged(final int state) {
mScrollState = state;
if (state == ViewPager.SCROLL_STATE_IDLE) {
mViewPager2.setCurrentItem(mViewPager1.getCurrentItem(), false);
}
}
});
mViewPager2.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
private int mScrollState = ViewPager.SCROLL_STATE_IDLE;
@Override
public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) {
if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
return;
}
mViewPager1.scrollTo(mViewPager2.getScrollX(), mViewPager1.getScrollY());
}
@Override
public void onPageSelected(final int position) {
}
@Override
public void onPageScrollStateChanged(final int state) {
mScrollState = state;
if (state == ViewPager.SCROLL_STATE_IDLE) {
mViewPager1.setCurrentItem(mViewPager2.getCurrentItem(), false);
}
}
});
关于android - 使用 OnPageChangeListener 同步两个 ViewPagers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107016/
我有 3 个选项卡,我使用 fragment 实现了这些选项卡。假设我每次滑动到 Tab2 时,我都希望执行相同的代码,即我希望每次都重新加载 Tab2 内容。这背后的原因是,在 Tab1 中,用户有
是否可以在 ViewPager 的 OnPageChangeListener 的方法 onPageScrolled 中知道滚动的方向? 最佳答案 我用过这样的东西: mPager.setOnPageC
我的应用程序使用连接的蓝牙设备向其发送事件,因此当我从 BLE 设备接收到事件时,我必须执行某些操作。此外,我还创建了一个实现 OnPageChangeListener 的内部类,并且我还使用一个用于
我正在使用下面的代码。但当您旋转屏幕或重新运行应用程序时它会起作用。 pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeLis
根据 this接受的答案,我能够得到我的 tabLyout 如下: 我现在需要的是能够根据 fragment 位置更改按钮文本,例如,如果位置为零,则不应出现 Back,如果位置为最后,Next 应该
我正在使用自定义 ViewPager,当我滑动到新页面时,ViewPager.OnPageChangeListener 不起作用。可能是什么原因? mPager = (WrapContentHeigh
关于 Android 中的淡入淡出的问题有很多,但它们都包括动画。我的问题是关于使用 ViewPager 的 OnPageChangeListener 进行淡入淡出。 我有一个 ViewPager,它
我试图禁止我的 ViewPager 在选项卡之间滚动。我有以下情况: public class MyClass extends ViewPager implements ViewPag
我有一项 Activity 正在加载 6 个 fragment 。三个 fragment 中的六个具有搜索 View ,其余三个 fragment 未实现搜索 View 。 我制作了两个menu.xm
我正在尝试同步两个 ViewPager,因为在我之前显然有很多人,我已经做到了这一点: private ViewPager mNavPager; private ViewPager mMainPage
我在这里看到了一些类似的帖子,但没有合适的答案。 我使用事件 onpageselected in a viewpager 来执行一个函数。此功能依赖于网络,因此可能需要一些时间。但是幻灯片动画看起来很
我用过viewpager,当页面改变时,标题会根据位置改变。 这是我在 onCreate() 中的代码 setContentView(R.layout.activity_single_news
我有一个带有标签的 ViewPager + ActionBar。当我“滑动”到另一个选项卡时,我想隐藏软键盘,但我不知道如何。 我已将我的 Activity 传递给 FragmentPageAdapt
我是 kotlin 的新手,如何在 ViewPager 中添加 OnPageChangeListener。 viewPager?.addOnPageChangeListener // Now how
我在 MainActivity 中将 circlePageIndicator 与我的 Viewpager 一起使用。 circlePagerIndicator.setViewPager(mPager)
我收到一条错误消息:构造函数 Intent(new ViewPager.OnPageChangeListener(){}, Class) 未定义 上线:Intent Intent = new Inte
我是一名优秀的程序员,十分优秀!