Android 为图像动态更新 ListView

Android updating ListView dynamically for images

我需要使用 Parse 服务在后台检索到的图像更新列表。使用下面的代码,我可以检索图像并显示,但交互速度很慢。有没有更好的方法在不影响用户交互速度的情况下动态更新ListView?

    ParseQuery<ParseObject> userFeedQuery = ParseQuery.getQuery("Offers");        
    userFeedQuery.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {
            if (e == null){
                if (objects.size() > 0){
                    for (ParseObject object:objects){
                        final String offerName = object.getString("offerName");
                        final String offerDetail = object.getString("offerDetails");
                        final Bitmap[] offerImage = new Bitmap[1];
                        ParseFile file = (ParseFile) object.getParseFile("offerImage");
                        file.getDataInBackground(new GetDataCallback() {
                            @Override
                            public void done(byte[] data, ParseException e) {
                                if (e == null){
                                    offerImage[0] = BitmapFactory.decodeByteArray(data,0,data.length);

                                    offerModelList.add(new OfferModel(offerName,offerDetail, offerImage[0]));
                                    adapter.notifyDataSetChanged();
                                }
                            }
                        });
                    }
                }
                adapter = new OffersAdapter(getApplicationContext(),R.layout.offers_table,offerModelList);
                offersListView.setAdapter(adapter);
            }
        }
    });

是的,您可以用 Picaso 或 Glide 替换 ParseImageView,但我更喜欢 Picaso。

替换

ParseFile file = (ParseFile) object.getParseFile("offerImage");

有了这个

String OfferImageUrl = object.getParseFile("offerImage");
        if (!TextUtils.isEmpty(OfferImageUrl)) {
            Picasso.with(this) // use getContext or contex for fragments or adapter
                    .load(OfferImageUrl)
                    .error(android.R.drawable.error) // your own error image
                    .into(mOfferImage); // mOfferImage = (ImageView) findViewById(R.id.offer_image); 
        }

希望对您有所帮助。如果您对这个问题有任何帮助,请告诉我。