Android之viewpager. PagerAdapter destroyItem報錯
在使用viewpager時,我們常常需要更新頁面資料,處理不當會導致陣列越界,從而引起頁面崩潰。
如圖:頁面只有一個viewpager,父系一共有10頁資料,“母系”只有一頁資料。初始化時使用“父系”資料填充,當點選“母系”時,會請求伺服器返回資料,從而更新viewpage資料來源。當“父系”時滑動到第5頁,這時候請求“母系”資料,請求資料後更新viewpager時PagerAdapter的destroyItem報錯報錯: java.lang.IndexOutOfBoundsException: Invalid index.....
原始碼:
private ScrollViewPager viewPager;
private List<View> mViewList;
viewPager = (ScrollViewPager) getView().findViewById(R.id.viewpager);
mViewList = new ArrayList<>();
for (int i = 0; i < pageAmount; i++) {
View viewItem = LayoutInflater.from(getContext()).inflate(R.layout.layout_cepu, null);
// 頁面資料賦值。。。。。。
mViewList.add(viewItem);
}
viewPager.setAdapter(mCycylePagerAdapter);
private PagerAdapter mCycylePagerAdapter = new PagerAdapter() {
@Override
public int getCount() {
return pageAmount; // 返回viewpager頁面的個數
}
//設定viewpage內部東西的方法,如果viewpage內沒有子空間滑動產生不了動畫效果
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mViewList.get(position));
//最後要返回的是控制元件本身
return mViewList.get(position);
}
// 加入頁面的時候,系統預設快取三個,滑動的圖片超出了快取的範圍,需要在此將圖片銷燬。如不做處理,滑多了程式就會蹦
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mViewList.get(position));
}
//判斷是否是否為同一張圖片,這裡返回方法中的兩個引數做比較就可以
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
};
修改方法:
方法1:在切換Tab按鈕時,把viewPager.setCurrentItem(0);
方法2:修改adapter方法container.removeView(mViewList.get(position)); 改成
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
相關文章
- 【安裝Android Studio報錯之解決方案】Android
- Android XML佈局報錯:android/view/View$OnUnhandledKeyEventListenerAndroidXMLView
- Android之Retrofit報錯Form-encoded method must contain at least one @Field.AndroidORMAIAST
- Android Studio 報錯解決方案 一Android
- Android switch語句報錯Constant expression requiredAndroidExpressUI
- React報錯之Element type is invalidReact
- Flutter 安裝搭建報錯 Android sdkmanager tool not foundFlutterAndroid
- AndroidStudio編譯時報錯Error:Please select Android SDKAndroid編譯Error
- Android將Jar放入libs目錄下編譯報錯AndroidJAR編譯
- Android之NDK開發錯誤 error: unknown type name 'JNIEXPORT'AndroidErrorExport
- Android Studio報錯:ERROR: Failed to resolve: com.android.support:appcompat-v7:28.0.+AndroidErrorAIAPP
- Mac之telnet報錯-bash: telnet: command not foundMac
- React報錯之Too many re-rendersReact
- 記一次 報錯:Android ClassNotFoundException: Didn't find class on pathAndroidException
- android Gradle錯(一)AndroidGradle
- React報錯之Function components cannot have string refsReactFunction
- AndroidStudio使用NDK報錯顯示mips64el-linux-android-strip''AndroidLinux
- 報錯com.android.build.api.transform.TransformException: java.util.zip.ZipException:AndroidUIAPIORMExceptionJava
- 關於Android Studio的This item may not have a label readable by screen readers報錯Android
- Android之記憶體洩漏除錯學習與總結Android記憶體除錯
- 實戰記錄之SQL server報錯手工注入SQLServer
- 將 Laravel 執行在 swoole 之後 summerblue/administrator 報錯Laravel
- JavaScript報錯型別(報錯速查)JavaScript型別
- android 無線除錯Android除錯
- iOS開發除錯之報錯:Command /usr/bin/codesign failed with exit code 1iOS除錯AI
- Android之android exported="false"作用AndroidExportFalse
- [轉]Android Studio匯入工程報錯 Error:Cause: peer not authenticated 解決方案AndroidError
- Android Studio 解決編譯報錯 Could not download aapt2-windows.jarAndroid編譯APTWindowsJAR
- Flutter url_launcher 報錯 canLaunch will return false(Android)的解決辦法FlutterFalseAndroid
- Android Studio專案匯入之後出錯:Error:(1, 0) Plugin with id 'com.android.application' not found.AndroidErrorPluginAPP
- Android之StrictModeAndroid
- Android之BroadcastReceiverAndroidAST
- Android之FragmentAndroidFragment
- Android之AlarmManagerAndroid
- Windows下hadoop環境搭建之NameNode啟動報錯WindowsHadoop
- python之異常捕獲&清除的列印報錯行Python
- 運維攻堅之jmeter壓力測試報錯運維JMeter
- ORACLE dbca執行到40%報錯之ORA-12154Oracle