0

我的 GridView 适配器有问题 - 第一次加载工作正常,但每次滑动重新加载都会将第一张图像添加到空的网格视图点中,即使知道结果中只有一张照片。

图片将有助于说明。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

所以我怀疑我的 GridAdapter 没有正确处理数据,但不确定我缺少什么。

这是我的 onSuccess,它在 AsyncHttpClient 从 API 获取数据后调用适配器:

@Override
            public void onSuccess(JSONObject jsonObject) {
                swipeLayout.setRefreshing(false);
                Toast.makeText(getApplicationContext(), "Success!", Toast.LENGTH_LONG).show();
                JSONArray list = jsonObject.optJSONArray("photos");
                for (int i = 0; i < list.length(); i++){
                    try {
                        photoUrlList.add(list.getJSONObject(i).getString("thumb_url"));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                mFourGridAdapter.updateData(photoUrlList);
            }

我的 MyFourGridAdapter:

 private class MyFourGridAdapter extends BaseAdapter
    {
        private LayoutInflater inflater;
        private List<String> photoUrlList;

        public MyFourGridAdapter(Context context, List<String> photoUrlList ) {
            inflater = LayoutInflater.from(context);
            this.photoUrlList = photoUrlList;
        }

        public void updateData(List<String> values) {
            // update the adapter's dataset
            photoUrlList = values;
            notifyDataSetChanged();
        }

        @Override
        public int getCount() {
            return photoUrlList.size();
        }

        @Override
        public Object getItem(int i)
        {
            return photoUrlList.get(i);
        }

        @Override
        public long getItemId(int i)
        {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View v = view;
            ImageView picture;

            if(v == null) {
                v = inflater.inflate(R.layout.gridview_item, viewGroup, false);
                v.setTag(R.id.frame_square_image_view, v.findViewById(R.id.frame_square_image_view));
            }

            picture = (ImageView)v.getTag(R.id.frame_square_image_view);
            String photoUrl = photoUrlList.get(i);
            Picasso.with(picture.getContext()).load(photoUrl).into(picture);

            return v;
        }
    }

如果有任何不清楚的地方,请发表评论 - 这有点难以解释。任何帮助表示赞赏,谢谢。

4

1 回答 1

0

你正在调用photoUrlList.add()你的onSuccess()方法。加上您的症状,这表明您不是在每次刷新操作时都从新列表开始,因此您在每次刷新时不断将相同的 URL 附加到ArrayList

于 2014-05-07T23:20:14.113 回答