gpt4 book ai didi

android - 如何将每个 viewpager 页面位置存储在它们的列表中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:20 25 4
gpt4 key购买 nike

我在 RecyclerView 中有一个带有 UnderlinePageIndicator 的 viewpager 列表,一个 fragment 中大约有 30 个。我想将每个寻呼机的页面位置存储在对象 mFlat 中,并在每次寻呼机更新时借助

从 mFlat 中检索它
flatViewHolder.pager.setCurrentItem(mFlat.get(RecyclerViewPosition).getCur_pos());

因此,当我尝试保存第一个寻呼机的当前页面时,就可以了。但是向下滚动页面后,每个寻呼机似乎都得到了这个页码——这是错误的。我想存储每个寻呼机的页码。这是我的 viewpager addOnPageChangeListener

flatViewHolder.pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int pos, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int pos) {
// save current page pos in mFlat object
mFlat.get(position).setCur_pos(pos);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});

当我滚动页面时,每次都会在不同的 viewpager 上触发

@Override
public void onPageSelected(int pos) {
// save current page pos in mFlat object
mFlat.get(position).setCur_pos(pos);
}

最佳答案

我认为问题在于您正在调用 addOnPageChangeListener:

viewHolder.pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {[...]}

由于维护了对寻呼机的引用,因此每次滚动时都会添加一个新的监听器。当该监听器被触发时,您的 position 变量将在与寻呼机引用关联的所有监听器中使用。

因此,我认为快速而肮脏的解决方案是使用 setOnPageChangeListener此方法已弃用,但尚未从 API 中删除。调用 set 而不是 add 会将当前与寻呼机关联的监听器替换为您的新监听器。因此只会调用一个监听器。

尝试一下。我认为它会把你带到你需要去的地方。

关于android - 如何将每个 viewpager 页面位置存储在它们的列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33788327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com