كيفية إجبار ViewPager على إعادة إنشاء عناصره [نسخة مكررة]
-
28-10-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
انا استخدم ViewPager
للسماح للمستخدم بالتمرير بين وجهات نظره.هل هناك طريقة لكيفية فرض هذا ViewPager
لإعادة تحميل/إعادة إنشاء مشاهداتها في حالة أنها لم تعد صالحة أو تحتاج إلى التحديث؟حاولت الاتصال notifyDataSetChanged()
على محوله ولكن هذا لا يستدعي instantiateItem()
الطريقة مرة أخرى.
يحرر
هذه هي الفئة التي تمتد من ViewPager وتعريف المحول الخاص بها.أدناه هو refresh()
الطريقة التي أسميها عندما أرغب في فرض تحديث العناصر.
public class DayFlipper extends ViewPager {
public class FlipperAdapter extends PagerAdapter {
@Override
public int getCount() {
return DayFlipper.DAY_HISTORY;
}
@Override
public void startUpdate(View container) {
}
@Override
public Object instantiateItem(View container, int position) {
Log.d(TAG, "instantiateItem(): " + position);
Date d = DateHelper.getBot();
for (int i = 0; i < position; i++) {
d = DateHelper.getTomorrow(d);
}
d = DateHelper.normalize(d);
CubbiesView cv = new CubbiesView(mContext);
cv.setLifeDate(d);
((ViewPager) container).addView(cv, 0);
// add map
cv.setCubbieMap(mMap);
cv.initEntries(d);
return cv;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView((CubbiesView) object);
}
@Override
public void finishUpdate(View container) {
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((CubbiesView) object);
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
}
...
public void refresh() {
getAdapter().notifyDataSetChanged();
}
}
المحلول 2
لقد وجدت الحل.إنه مجرد حل بديل لمشكلتي ولكنه الحل الوحيد حاليًا.
لا يقوم ViewPager PagerAdapter بتحديث طريقة العرض
public int getItemPosition(Object object) {
return POSITION_NONE;
}
هل يعرف أحد ما إذا كان هذا خطأ أم لا؟
نصائح أخرى
كان لديه نفس المشكلة.بالنسبة لي عملت على الاتصال
viewPage.setAdapter( adapter );
مرة أخرى مما تسبب في إعادة تشغيل الصفحات مرة أخرى.
public class DayFlipper extends ViewPager {
private Flipperadapter adapter;
public class FlipperAdapter extends PagerAdapter {
@Override
public int getCount() {
return DayFlipper.DAY_HISTORY;
}
@Override
public void startUpdate(View container) {
}
@Override
public Object instantiateItem(View container, int position) {
Log.d(TAG, "instantiateItem(): " + position);
Date d = DateHelper.getBot();
for (int i = 0; i < position; i++) {
d = DateHelper.getTomorrow(d);
}
d = DateHelper.normalize(d);
CubbiesView cv = new CubbiesView(mContext);
cv.setLifeDate(d);
((ViewPager) container).addView(cv, 0);
// add map
cv.setCubbieMap(mMap);
cv.initEntries(d);
adpter = FlipperAdapter.this;
return cv;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView((CubbiesView) object);
}
@Override
public void finishUpdate(View container) {
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((CubbiesView) object);
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
}
...
public void refresh() {
adapter().notifyDataSetChanged();
}
}
جرب هذا.
لا تنتمي إلى StackOverflow