Tôi có một ListView
có chứa các hàng của ViewPager
s. Khi ViewPager
bị cuộn khỏi màn hình, tôi muốn lưu vị trí trang của nó. Khi người dùng cuộn đến ViewPager
một lần nữa, sau đó tôi muốn khôi phục vị trí trang đã lưu cuối cùng của nó.Dừng ViewPagers bên trong ListView từ đặt lại
Tôi đang cố gắng để thực hiện điều này với đoạn mã sau:
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);
}
}
}
Vị trí trang được lưu trên gọi đầu tiên của setPagerPosition()
. Sau đó, khi ViewPager
tắt màn hình, onPageSelected()
được gọi với vị trí trang đầu tiên đã được lưu - ghi đè bất kỳ lệnh gọi onPageSelected()
trước đó xảy ra khi ViewPager
vẫn hiển thị.
Cách thích hợp để thực hiện việc này là gì?
Danh sách 'ids' là gì? – Luksprog
Id của hàng trong ListView sẽ đến từ phía máy chủ. – Simian
@Simian, hãy thử gọi 'setOnPageChangeListener' trước khi gọi' setCurrentItem' –