【问题标题】:In View Pager displayed only last Images from Json repeatedly in android在 View Pager 中仅在 android 中重复显示来自 Json 的最后一个图像
【发布时间】:2016-05-07 06:11:15
【问题描述】:

我在 android 中显示 Image Slider 的图像时遇到问题。我从 JSON 中获取图像,但总是只显示索引的最后一个图像,假设我是否可以一次又一次地移动 View Pager 相同的图像以显示图像滑入安卓。 我不知道是什么问题,我几乎尽我所能,但我真的找不到那个错误。 任何人都可以帮助解决我的问题。

代码:

 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_zoomproduct_);
     options = new DisplayImageOptions.Builder()
         .showStubImage(R.drawable.b2)
         .showImageForEmptyUri(R.drawable.b2)
         .showImageOnFail(R.drawable.b2)
         .build();


     /********************  this is for single page product ***********************/

     Intent singleproductpage = getIntent();
     singlepro = singleproductpage.getStringExtra("currentinedx");
     Intent multipleimages = getIntent();
     multipleimg = multipleimages.getStringExtra("multipleimages");
     Intent productpath = getIntent();
     productpaths = productpath.getStringExtra("productpath");
     Intent seller = getIntent();
     sellers = seller.getStringExtra("sellerid");
     //  pDialog = new ProgressDialog(Zoomproduct_Activity.this);
     //   pDialog.setMessage("Please wait...");
     //   pDialog.setCancelable(false);
     singleproduct();
     viewPager = (ViewPager) findViewById(R.id.pager);
     // Pass results to ViewPagerAdapter Class
     adapter = new ZoomAdapter(Zoomproduct_Activity.this, adlist);
     // Binds the Adapter to the ViewPager
     viewPager.setAdapter(adapter);
     adapter.notifyDataSetChanged();
 }

multipleimage = new JSONArray(multiimg);
if (multipleimage.length() > 0) {
     for (int i = 0; i < multipleimage.length(); i++) {

         JSONObject singleimg = multipleimage.getJSONObject(i);
         /*oneimg = singleimg.getString("original_res");
         String singleImages= productpath+sid+ '/'+ oneimg;*/
         // zoom.setImageUrl(productpaths+sellers+ '/'+singleimg.getString("original_res"));
         // imgs.add(zoom);
         String imagesone = productpaths + sellers + '/' + singleimg.getString("original_res");
         map.put(TAG_IMAGE, imagesone);
         adlist.add(map);
         String imgs1 = String.valueOf(adlist);
         //String zoom1=String.valueOf(imgs1);
         // Log.d(zoom1,"zoom");
         Log.d(imgs1, "ararlist");

    }
}

适配器:

public class ZoomAdapter extends PagerAdapter {
    LayoutInflater inflator;
    ImageView imgDisplay;
    Context context;
    //  ArrayList<ZoomimageModel> slideShowImages;
    //  ArrayList<String> slideShowImages;
    private ArrayList < HashMap < String, String >> slideShowImages;
    HashMap < String, String > plotimages;

    DisplayImageOptions options;

    public ZoomAdapter(Context context, ArrayList < HashMap < String, String >> slideShowImages) {
        this.context = context;
        this.slideShowImages = slideShowImages;
        options = new DisplayImageOptions.Builder()
            .showStubImage(R.drawable.slip1)
            .showImageForEmptyUri(R.drawable.b2)
            .showImageOnFail(R.drawable.ic_drawer)
            .build();
    }
    @Override
    public int getCount() {
        return slideShowImages.size();
    }
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }


    // @Override
    /*  public boolean isViewFromObject(View view, Object object) {
          return view == ((ImageView) object);
      }*/

    //    @Override
    public Object instantiateItem(ViewGroup container, final int position) {
        inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View viewLayout = inflator.inflate(R.layout.productzoomrow, container,
            false);
        imgDisplay = (ImageView) viewLayout.findViewById(R.id.imgDisplay);
        // ZoomimageModel zooms=slideShowImages.get(position);
        plotimages = slideShowImages.get(position);

        // System.out.println("ImageUrl---------------------"+slideShowImages.get(position).getImageUrl());
        System.out.println("ImageUrl---------------------" + plotimages.get(Zoomproduct_Activity.TAG_IMAGE));
        //  YelloPage.imageLoader.displayImage(zooms.getImageUrl(), imgDisplay, options);
        YelloPage.imageLoader.displayImage(plotimages.get(Zoomproduct_Activity.TAG_IMAGE), imgDisplay, options);

        container.addView(viewLayout);
        return viewLayout;
    }



    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // ((ViewPager) container).removeView((ImageView) object);
        (container).removeView((RelativeLayout) object);
        // container.removeView((View) object);
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }


    /* @Override
     public void destroyItem(ViewGroup container, int position, Object object)
     {
         ((ViewPager) container).removeView((ImageView) object);
     }*/
}

Logcat 显示图像:

[05 - 07 02: 06: 15.445 26970: 26970 D / [{
                original_res = http: //192.168.0.33/cartwebsite3/cdn-images/prd/1/lenovo-a6000-171452579105.jararlist

                    [05 - 07 02: 06: 15.445 26970: 26970 D / [{
                                original_res = http: //192.168.0.33/cartwebsite3/cdn-images/prd/1/lenovo-a6000-791452579106.jararlist

                                    [05 - 07 02: 06: 15.445 26970: 26970 D / [{
                                                original_res = http: //192.168.0.33/cartwebsite3/cdn-images/prd/1/lenovo-a6000-971452579106.jararlist

                                                    [05 - 07 02: 06: 15.445 26970: 26970 D / [{
                                                                original_res = http: //192.168.0.33/cartwebsite3/cdn-images/prd/1/lenovo-a6000-341452579106.jararlist

                                                                    [05 - 07 02: 06: 15.445 26970: 26970 D / [{
                                                                                original_res = http: //192.168.0.33/cartwebsite3/cdn-images/prd/1/lenovo-a6000-891452579106.jararlist

                                                                                    [05 - 07 02: 06: 15.445 26970: 26970 D / [{
                                                                                                original_res = http: //192.168.0.33/cartwebsite3/cdn-images/prd/1/lenovo-a6000-441452579106.jararlist
                                                                                                    05 - 07 02: 06: 15.445 26970 - 26970 / com.journaldev.navigationdrawer D / lenovo - a6000 - 171452579105. jpeg: images
                                                                                                05 - 07 02: 06: 15.445 26970 - 26970 / com.journaldev.navigationdrawer D / lenovo - a6000 - 791452579106. jpeg: images
                                                                                                05 - 07 02: 06: 15.446 26970 - 26970 / com.journaldev.navigationdrawer D / lenovo - a6000 - 971452579106. jpeg: images
                                                                                                05 - 07 02: 06: 15.446 26970 - 26970 / com.journaldev.navigationdrawer D / lenovo - a6000 - 341452579106. jpeg: images
                                                                                                05 - 07 02: 06: 15.446 26970 - 26970 / com.journaldev.navigationdrawer D / lenovo - a6000 - 891452579106. jpeg: images
                                                                                                05 - 07 02: 06: 15.446 26970 - 26970 / com.journaldev.navigationdrawer D / lenovo - a6000 - 441452579106. jpeg: images
                                                                                                05 - 07 02: 06: 15.448 754 - 7094 / system_process V / WindowManager: Adding window Window {
                                                                                                    39992643 u0 com.journaldev.navigationdrawer / com.journaldev.navigationdrawer.Activity.Zoomproduct_Activity
                                                                                                }
                                                                                                at 4 of 9(after Window {
                                                                                                    2 fb8c08e u0 com.journaldev.navigationdrawer / com.journaldev.navigationdrawer.Activity.singleshooppingcart
                                                                                                })
                                                                                                05 - 07 02: 06: 15.464 26970 - 26970 / com.journaldev.navigationdrawer I / System.out: ImageUrl-- -- -- -- -- -- -- -- -- -- - http: //192.168.0.33/cartwebsite3/cdn-images/prd/1/lenovo-a6000-441452579106.jpeg
                                                                                                    05 - 07 02: 06: 15.477 26970 - 26970 / com.journaldev.navigationdrawer I / System.out: ImageUrl-- -- -- -- -- -- -- -- -- -- - http: //192.168.0.33/cartwebsite3/cdn-images/prd/1/lenovo-a6000-441452579106.jpeg
                                                                                                    05 - 07 02: 06: 15.535 26970 - 27049 / com.journaldev.navigationdrawer W / EGL_emulation: eglSurfaceAttrib not implemented
                                                                                                05 - 07 02: 06: 15.536 26970 - 27049 / com.journaldev.navigationdrawer W / OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xe2266e00,
                                                                                                error = EGL_SUCCESS
                                                                                                05 - 07 02: 06: 15.792 754 - 780 / system_process I / ActivityManager: Displayed com.journaldev.navigationdrawer / .Activity.Zoomproduct_Activity: +358 ms
                                                                                                05 - 07 02: 06: 16.062 715 - 715 / ? W / SurfaceFlinger : couldn 't log to binary event log: overflow.
                                                                                                05 - 07 02: 06: 20.092 26970 - 26970 / com.journaldev.navigationdrawer I / System.out: ImageUrl-- -- -- -- -- -- -- -- -- -- - http: //192.168.0.33/cartwebsite3/cdn-images/prd/1/lenovo-a6000-441452579106.jpeg
                                                                                                    05 - 07 02: 06: 20.256 754 - 1067 / system_process D / WifiService: acquireWifiLockLocked: WifiLock {
                                                                                                        NlpWifiLock type = 2 binder = android.os.BinderProxy @997c048
                                                                                                    }

很高兴解决我的问题

【问题讨论】:

  • 您能解释一下为什么您使用HashMap 中的ArrayList 而不是只使用String 中的ArrayList 并按位置获取image。
  • 您的代码中的问题是您对每个图像使用相同的IMAGE_TAG,因此将显示添加到HashMap 的最后一张图像
  • 在我不使用 HashMap 之前,我使用模型来设置和获取图像,但那一个也是我得到相同的图像
  • 你明白我的意思吗?由于您在 HashMap 中使用相同的 Key 用于图像,它会返回最后一张图像,只需尝试记录 HashMap 大小它将是 1
  • 如何更改我的代码以获取所有图像,请告诉我

标签: android android-layout android-studio android-viewpager android-imageview


【解决方案1】:

您可以将ArrayList&lt;HashMap&lt;String,String&gt;&gt; 更改为ArrayList&lt;String&gt;,因为您的代码似乎不需要HashMap。

接下来在您的for 循环中,您将图像路径添加到HashMap,而不是将其直接添加到ArrayList,

然后在您的PagerAdapter 的getView() 中使用slideShowImages.get(position) 从ArrayList&lt;&gt; 获取图像,

【讨论】:

  • 谢谢哥们,真的非常感谢,我犯了一个小错误让我头疼。
  • 太棒了。乐于助人:)
  • 非常感谢。
  • 添加答案来解释什么是问题并不是一个好习惯,而是做一件事发布一个新问题或用详细信息更新这个问题:)
  • 感谢您的 cmets 好友
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
相关资源
最近更新 更多