
我正在开发一个应用程序,它从服务器检索图像并将其存储在sdcard中.
我将图像的路径存储在本地数据库中,然后在使用vIEwpager显示它们时使用它们.
当只有两个图像时,一切正常,但是当有两个以上图像时,该应用程序停止运行,并且在图像之间滑动时发生.当我滑动两次以上时,该应用程序立即停止.
class RequestLoadingMeals extends AsyncTask <VoID, VoID, VoID> { protected voID onPreExecute(){ super.onPreExecute(); PD = new ProgressDialog(Meals.this); PD.setMessage("Loading Meals, Please wait..."); PD.setIndeterminate(false); PD.setCancelable(true); PD.setProgressstyle(ProgressDialog.STYLE_SPINNER); PD.show(); } @OverrIDe protected VoID doInBackground(VoID... arg0) { // Todo auto-generated method stub myDatabaseHandler.openToRead(); Cursor meals_cursor = myDatabaseHandler.queueSomeMeals(rest_name); if (meals_cursor.movetoFirst()) { do { try{ images.add(meals_cursor.getString(meals_cursor.getColumnIndex(DatabaseHandler.KEY_MEAL_IMAGE_PATH))); } catch (Exception h){ } }while (meals_cursor.movetoNext()); } myDatabaseHandler.close(); return null; } protected voID onPostExecute(final VoID x) { VIEwPagerAdapter adapter = new VIEwPagerAdapter(Meals.this, images); VIEwPager myPager = (VIEwPager) findVIEwByID(R.ID.mypager); myPager.setAdapter(adapter); myPager.setCurrentItem(0); PD.dismiss(); }}这是vIEwpager类
public class VIEwPagerAdapter extends PagerAdapter { Activity activity; ArrayList<String> imageArray = new ArrayList<String>(); public VIEwPagerAdapter(Activity act, ArrayList<String> images) { imageArray = images; activity = act; } public int getCount() { return imageArray.size(); } public Object instantiateItem(VIEwGroup collection, int position) { ImageVIEw vIEw = new ImageVIEw(activity); vIEw.setLayoutParams(new LayoutParams()); vIEw.setScaleType(ScaleType.FIT_XY); String path = imageArray.get(position); Bitmap myBitmap = BitmapFactory.decodefile(path); vIEw.setimageBitmap(myBitmap); ((VIEwPager) collection).addVIEw(vIEw, 0); return vIEw; } @OverrIDe public boolean isVIEwFromObject(VIEw arg0, Object arg1) { return arg0 == ((VIEw) arg1); } @OverrIDe public Parcelable saveState() { return null; }}Logcat:
12-02 12:46:38.956: E/AndroIDRuntime(431): FATAL EXCEPTION: main12-02 12:46:38.956: E/AndroIDRuntime(431):java.lang.UnsupportedOperationException:required method destroyItem was not overrIDden12-02 12:46:38.956: E/AndroIDRuntime(431): at androID.support.v4.vIEw.PagerAdapter.destroyItem(PagerAdapter.java:192)12-02 12:46:38.956: E/AndroIDRuntime(431): at androID.support.v4.vIEw.PagerAdapter.destroyItem(PagerAdapter.java:124)12-02 12:46:38.956: E/AndroIDRuntime(431): at androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:1036)12-02 12:46:38.956: E/AndroIDRuntime(431): at androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:914)12-02 12:46:38.956: E/AndroIDRuntime(431): at androID.support.v4.vIEw.VIEwPager.run(VIEwPager.java:244)12-02 12:46:38.956: E/AndroIDRuntime(431): at androID.os.Handler.handleCallback(Handler.java:587)12-02 12:46:38.956: E/AndroIDRuntime(431): at androID.os.Handler.dispatchMessage(Handler.java:92)12-02 12:46:38.956: E/AndroIDRuntime(431): at androID.os.Looper.loop(Looper.java:123)12-02 12:46:38.956: E/AndroIDRuntime(431): at androID.app.ActivityThread.main(ActivityThread.java:3683)12-02 12:46:38.956: E/AndroIDRuntime(431): at java.lang.reflect.Method.invokeNative(Native Method)12-02 12:46:38.956: E/AndroIDRuntime(431): at java.lang.reflect.Method.invoke(Method.java:507)12-02 12:46:38.956: E/AndroIDRuntime(431): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)12-02 12:46:38.956: E/AndroIDRuntime(431): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:597)12-02 12:46:38.956: E/AndroIDRuntime(431): at dalvik.system.NativeStart.main(Native Method)解决方法:
将此添加到您的VIEwPagerAdapter中:
@OverrIDepublic voID destroyItem(VIEw collection, int position, Object vIEw) { ((VIEwPager) collection).removeVIEw((VIEw) vIEw);}并且我建议不要在InstantiateItem中执行长时间运行的繁重任务.在UI线程上解码图像是个坏主意.
总结以上是内存溢出为你收集整理的android-使用Viewpager强制关闭全部内容,希望文章能够帮你解决android-使用Viewpager强制关闭所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)