gpt4 book ai didi

android - 停止 ListView 内的 ViewPagers 重置

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:11:50 25 4
gpt4 key购买 nike

我有一个 ListView,其中包含多行 ViewPager。当 ViewPager 滚出屏幕时,我想保存它的页面位置。当用户再次滚动到 ViewPager 时,我想恢复其上次保存的页面位置。

我正在尝试使用以下代码完成此操作:

public class MyBaseAdapter extends BaseAdapter {

// Row ids that will come from server-side, uniquely identifies each
// ViewPager
private List<String> mIds = new ArrayList<String>();
private Map<String, Integer> mPagerPositions = new HashMap<String, Integer>();

@Override
public View getView(int position, View convertView, ViewGroup parent) {
String id = mIds.get(position);

View rootView = convertView;
if (rootView == null) {
rootView = LayoutInflater.from(parent.getContext()).inflate(
R.layout.row, null);
}

ViewPager viewPager = (ViewPager) rootView.findViewById(R.id.pager);
Integer pagerPosition = mPagerPositions.get(id);
if (pagerPosition != null) {
viewPager.setCurrentItem(pagerPosition);
}
viewPager.setOnPageChangeListener(new MyPageChangeListener(id));

return rootView;
}

@Override
public int getCount() {
return mIds.size();
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

private class MyPageChangeListener extends
ViewPager.SimpleOnPageChangeListener {

private String mId;

public MyPageChangeListener(String id) {
mId = id;
}

@Override
public void onPageSelected(int position) {
mPagerPositions.put(mId, position);
}
}
}

页面位置在第一次调用 setPagerPosition() 时保存。之后,当 ViewPager 离开屏幕时,调用 onPageSelected() 并使用保存的第一个页面位置 — 覆盖之前的任何 onPageSelected()ViewPager 仍然可见时发生的调用。

正确的做法是什么?

最佳答案

解决方案是在 ViewPager 不可见时不覆盖寻呼机位置。 Android 中似乎存在一个错误,即当在 ListView 中滚动时 ViewPager 离开屏幕时调用 onPageSelected。

@Override
public void onPageSelected(int position) {
if (viewPager.isShown()) {
mTopicPositions.put(mId, position);
}
}

关于android - 停止 ListView 内的 ViewPagers 重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15379443/

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