更改GridView的行时,它会显示第一张图像

时间:2019-02-05 08:14:06

标签: java android gridview

在我的应用中,我只能上传5张图像,当我上传3或5张图像时效果很好,但是当我仅上传4张图像(然后更改行数)时,它在位置3和位置0上显示的图像相同。

 public void showList(final JSONArray responsearray) {
    try {
        for (int i = 0; i < responsearray.length(); i++) {
            JSONObject responseObject = responsearray.getJSONObject(i);
            Log.e("COUNT" + i, String.valueOf(responseObject));
            imageOne = responseObject.getString(TAG_PHOTO_ONE);
            get = new HashMap<>();
            get.put(TAG_PHOTO_ONE, imageOne);
            myList.add(get);
        }
        adapter = new SimpleAdapter(getActivity(), myList, R.layout.row_more_images,
                new String[]{TAG_PHOTO_ONE},
                new int[]{R.id.photo1}) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                final View v = super.getView(position, convertView, parent);
                if (convertView == null) {
                    TextView photo1 = v.findViewById(R.id.photo1);
                    photoOne = v.findViewById(R.id.photo_one);
                    String imgPath = getString(R.string.moreimgpath);
                    if (!photo1.getText().toString().equalsIgnoreCase("null")) {
                        final_image_url = imgPath + photo1.getText().toString();
                        Log.e("FINALPATH", final_image_url);
                        ImageLoader.getInstance().displayImage(final_image_url, photoOne, options, animateFirstListener);
                    }
                }
                return v;
            }
        };
        if (gridview.getAdapter() == null) {
            gridview.setAdapter(adapter);
        }
        gridview.setOnItemClickListener(this);
    } catch (JSONException e) {
        e.printStackTrace();
    } catch (NullPointerException e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:0)

  

将代码更改为

 public void showList(final JSONArray responsearray) {
        try {
            for (int i = 0; i < responsearray.length(); i++) {
                JSONObject responseObject = responsearray.getJSONObject(i);
                Log.e("COUNT" + i, String.valueOf(responseObject));
                String imageOne = responseObject.getString(TAG_PHOTO_ONE);
                HashMap<> get = new HashMap<>();
                get.put(TAG_PHOTO_ONE, imageOne);
                myList.add(get);
            }
            adapter = new SimpleAdapter(getActivity(), myList, R.layout.row_more_images,
                    new String[]{TAG_PHOTO_ONE},
                    new int[]{R.id.photo1}) {
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    final View v = super.getView(position, convertView, parent);
                    if (convertView == null) {
                        TextView photo1 = v.findViewById(R.id.photo1);
                        ImageView photoOne = v.findViewById(R.id.photo_one);
                        String imgPath = getString(R.string.moreimgpath);
                        if (!photo1.getText().toString().equalsIgnoreCase("null")) {
                            final_image_url = imgPath + photo1.getText().toString();
                            Log.e("FINALPATH", final_image_url);
                            ImageLoader.getInstance().displayImage(final_image_url, photoOne, options, animateFirstListener);
                        }
                    }
                    return v;
                }
            };
            if (gridview.getAdapter() == null) {
                gridview.setAdapter(adapter);
            }
    else{
    notfyDataSetChanged();
    }
            gridview.setOnItemClickListener(this);
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }

答案 1 :(得分:0)

我解决了这个问题,只需添加:-adapter.notifyDataSetChanged();                                 gridview.invalidateViews();如果条件为(convertView == null)

 public void showList(final JSONArray responsearray) {
try {
    for (int i = 0; i < responsearray.length(); i++) {
        JSONObject responseObject = responsearray.getJSONObject(i);
        Log.e("COUNT" + i, String.valueOf(responseObject));
        imageOne = responseObject.getString(TAG_PHOTO_ONE);
        get = new HashMap<>();
        get.put(TAG_PHOTO_ONE, imageOne);
        myList.add(get);
    }
    adapter = new SimpleAdapter(getActivity(), myList, R.layout.row_more_images,
            new String[]{TAG_PHOTO_ONE},
            new int[]{R.id.photo1}) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final View v = super.getView(position, convertView, parent);
            if (convertView == null) {
                TextView photo1 = v.findViewById(R.id.photo1);
                photoOne = v.findViewById(R.id.photo_one);
                String imgPath = getString(R.string.moreimgpath);
                if (!photo1.getText().toString().equalsIgnoreCase("null")) {
                    final_image_url = imgPath + photo1.getText().toString();
                    Log.e("FINALPATH", final_image_url);
                    ImageLoader.getInstance().displayImage(final_image_url, photoOne, options, animateFirstListener);
                }
                    adapter.notifyDataSetChanged();
                    gridview.invalidateViews();
            }
            return v;
        }
    };
    if (gridview.getAdapter() == null) {
        gridview.setAdapter(adapter);
    }
    gridview.setOnItemClickListener(this);
} catch (JSONException e) {
    e.printStackTrace();
} catch (NullPointerException e) {
    e.printStackTrace();
}}