在BaseAdapter中很奇怪

时间:2016-03-06 18:57:01

标签: java android gridview baseadapter

应该是带有GridView和图像的应用程序的简单部分,当按钮单击进入相机,捕获新照片并将其添加到GridView

我在这里申请ImageAdapter extends BaseAdapter

partItem = getPart(position);

StaticGridView gridView = (StaticGridView) view.findViewById(R.id.ImagesGrid);
imageAdapter = new ImageAdapter(mContext, partItem.P_Code, partItem.Images);
gridView.setAdapter(imageAdapter);

ImageAdapter.java

public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    public Map<Integer, String> partImages;
    public String P_Code;

    private static final String TAG = "ImageAdapter";

    public ImageAdapter(Context c, String _P_Code, Map<Integer, String> _partImages) {
        this.mContext = c;
        this.partImages = _partImages;
        this.P_Code = _P_Code;
    }

    public void changeModelList(Map<Integer, String> _partImages) {
        partImages = _partImages;
        notifyDataSetChanged();
    }

    public int getCount() {
        return partImages.size();
    }

    @Override
    public Object getItem(int position) {
        return partImages.get(position);
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.MATCH_PARENT, GridView.LayoutParams.MATCH_PARENT));
            imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

            Picasso.with(mContext)
                    .load(API.ApiUrlBase + "/imagepreview/android" + getItem(position))
                    .placeholder(android.R.drawable.ic_menu_gallery)
                    .into(imageView);

            Log.d(TAG, position + ":" + String.valueOf(getItem(position)));

        } else {
            imageView = (ImageView) convertView;
        }

        return imageView;
    }

}

进入日志

: 1:/data/44452.P1090185.JPG
: 2:/data/44452.P1090186.JPG
: 3:/data/44452.P1090187.JPG
: 0:/data/44452.P1090184.JPG
: 0:/data/44452.P1090184.JPG
毕加索可以,但是当我尝试添加新图像时

partItem.Images.put(imageAdapter.getCount(), mCurrentPhotoPath);
// imageAdapter.notifyDataSetChanged();
imageAdapter.changeModelList(partItem.Images);

进入日志

{
  4=file:/storage/sdcard/Pictures/JPEG_20160306_213748_1027396172.jpg,
  1=/data/44452.P1090185.JPG,
  0=/data/44452.P1090184.JPG,
  3=/data/44452.P1090187.JPG,
  2=/data/44452.P1090186.JPG
}
: 0:/data/44452.P1090184.JPG

并且第一个图像出现在GridView上,但没有新文件。 有人有想法吗? GridView screenshot

1 个答案:

答案 0 :(得分:0)

这么简单......
我认为BaseAdapter无法使用HashMap
改变了这个

public Map<Integer, String> partImages;

到这个

public ArrayList partImages;