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開發技巧——PagerAdapter再簡單的包AndroidAPT
- 【安裝Android Studio報錯之解決方案】Android
- PagerAdapter閃屏坑的修復APT
- Xamarin Android真機測試報錯Android
- Android XML佈局報錯:android/view/View$OnUnhandledKeyEventListenerAndroidXMLView
- React報錯之Element type is invalidReact
- Android之Retrofit報錯Form-encoded method must contain at least one @Field.AndroidORMAIAST
- Android Studio 報錯解決方案 一Android
- 開啟Android Studio報錯"required plugin “Android Support” is disabled"AndroidUIPlugin
- React報錯之Too many re-rendersReact
- codeIgniter 之 session fopen & touch 報錯Session
- Flutter 安裝搭建報錯 Android sdkmanager tool not foundFlutterAndroid
- Android switch語句報錯Constant expression requiredAndroidExpressUI
- JavaScript報錯型別(報錯速查)JavaScript型別
- 實戰記錄之SQL server報錯手工注入SQLServer
- Android將Jar放入libs目錄下編譯報錯AndroidJAR編譯
- 安裝android studio報錯Failed to install Intel HAXM.AndroidAIIntel
- android studio 安裝報錯 unable to run mksdcard sdk toolAndroid
- 運維攻堅之jmeter壓力測試報錯運維JMeter
- Mac之telnet報錯-bash: telnet: command not foundMac
- React報錯之Function components cannot have string refsReactFunction
- IMP後,報錯ORA-28100————之解決。
- JavaScript報錯JavaScript
- spark報錯Spark
- mybatis報錯MyBatis
- redis報錯Redis
- 報錯+2
- playsound報錯
- 前端報錯前端
- dhcp報錯
- 報錯集
- springcloud報錯報UnsatisfiedDependencyExceptionSpringGCCloudException
- asm報錯一例-support 報錯rename failedASMAI
- 記一次 報錯:Android ClassNotFoundException: Didn't find class on pathAndroidException
- 報錯com.android.build.api.transform.TransformException: java.util.zip.ZipException:AndroidUIAPIORMExceptionJava
- Android studio 開啟一個新專案後會報錯Android
- Windows下hadoop環境搭建之NameNode啟動報錯WindowsHadoop
- Java學習筆記之Scanner報錯java.util.NoSuchElementExceptionJava筆記Exception