ViewPager
の行を含むListView
があります。 ViewPager
が画面からスクロールされると、そのページの位置を保存します。ユーザーがViewPager
に再度スクロールすると、最後に保存されたページの位置を復元します。リストビュー内のViewPaperをリセットしないでください
私は、次のコードでこれを実現しようとしている:
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()
が呼び出され、ViewPager
が引き続き表示されたときに発生した以前のonPageSelected()
呼び出しを上書きします。
これは正しい方法はありますか?
「ids」リストとは何ですか? – Luksprog
ListView内のサーバー側から来る行のID。 – Simian
@Simian、 'setCurrentItem'を呼び出す前に' setOnPageChangeListener'を呼び出そうとしています –