android-使用Viewpager强制关闭

android-使用Viewpager强制关闭,第1张

概述我正在开发一个应用程序,它从服务器检索图像并将其存储在sdcard中.我将图像的路径存储在本地数据库中,然后在使用viewpager显示它们时使用它们.当只有两个图像时,一切正常,但是当有两个以上图像时,该应用程序停止运行,并且在图像之间滑动时发生.当我滑动两次以上时,该应用程序立即

我正在开发一个应用程序,它从服务器检索图像并将其存储在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强制关闭所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1075689.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存