ViewPager
개의 행을 포함하는 ListView
이 있습니다. ViewPager
이 화면에서 스크롤되면 페이지 위치를 저장하려고합니다. 사용자가 ViewPager
으로 다시 스크롤하면 마지막으로 저장된 페이지 위치를 복원하려고합니다. ListView 내의 ViewPart를 재설정하지 못하도록
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
이 화면을 벗어나면 ViewPager
이 여전히 표시 될 때 발생한 이전의 onPageSelected()
호출을 덮어 쓰면서 저장된 첫 번째 페이지 위치와 함께 onPageSelected()
이 호출됩니다.
어떻게해야할까요?
'ids' 목록이란 무엇입니까? – Luksprog
ListView에서 서버 측에서 가져온 행의 id입니다. – Simian
@Simian,'setCurrentItem'을 호출하기 전에'setOnPageChangeListener'를 호출 해보십시오. –