解决方案 »

  1.   

    修改完后调用适配器的notifyDataSetChanged()刷新一下
      

  2.   

    闲来无事 给楼主写了个DEMO,希望对楼主有所帮助Activity
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemLongClickListener;
    import android.widget.BaseAdapter;
    import android.widget.GridView;
    import android.widget.ImageView;
    import android.widget.Toast;
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.content.Intent;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;public class MainActivity extends Activity {
    private GridView gv;
    private final String IMAGE_TYPE = "image/*";
    private BaseAdapter adapter;
    private String image_Path = "";// 图片路径
    private Bitmap[] bmChose = new Bitmap[4];// 保存用户所选定的图片
    private int flag;// 标记用户点击的GridView子项 @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 初始化
    gv = (GridView) findViewById(R.id.gv);
    for (int i = 0; i < bmChose.length; i++) {
    bmChose[i] = BitmapFactory.decodeResource(getResources(),
    R.drawable.ic_launcher);
    }
    adapter = new BaseAdapter() { @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
    LayoutInflater inflater = getLayoutInflater();
    ImageView iv = (ImageView) inflater.inflate(
    R.layout.imageview_item, null);
    convertView = iv;
    }
    ((ImageView) convertView).setImageBitmap(bmChose[position]);
    return convertView;
    } @Override
    public long getItemId(int position) { return 0;
    } @Override
    public Object getItem(int position) { return null;
    } @Override
    public int getCount() { return 4;
    }
    };
    gv.setAdapter(adapter);
    gv.setOnItemLongClickListener(new OnItemLongClickListener() { @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view,
    int position, long id) {
    flag = position;
    // 使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片
    Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);
    getAlbum.setType(IMAGE_TYPE);
    startActivityForResult(getAlbum, 0);
    return false;
    }
    });
    } @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) {// 此处的 RESULT_OK 是系统自定义得一个常量
    return;
    }
    // 外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口
    ContentResolver resolver = getContentResolver();
    if (requestCode == 0) {// 此处的用于判断接收的Activity是不是你想要的那个
    try {
    Uri originalUri = data.getData(); // 获得图片的uri
    // 获取图片的路径:
    String[] proj = { MediaStore.Images.Media.DATA };
    // 好像是android多媒体数据库的封装接口,具体的看Android文档
    Cursor cursor = managedQuery(originalUri, proj, null, null,
    null);// 此处为可能NULL
    if (cursor != null) {
    // 获得用户选择的图片的索引值
    int column_index = cursor
    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    // 将光标移至开头 ,这个很重要,不小心很容易引起越界
    cursor.moveToFirst();
    // 最后根据索引值获取图片路径
    image_Path = cursor.getString(column_index);
    bmChose[flag] = MediaStore.Images.Media.getBitmap(resolver,
    originalUri);
    // 缩放图片
    bmChose[flag] = Bitmap.createScaledBitmap(bmChose[flag],
    200, 320, true);
    // 通知更新adapter
    adapter.notifyDataSetChanged();
    } else {
    Toast.makeText(MainActivity.this, "你选择的图片已经被删除,请重新选择", 2000)
    .show();
    } } catch (Exception e) {
    Log.d("2", e.toString());
    }
    }
    } @Override
    protected void onDestroy() {
    super.onDestroy();
    for (int i = 0; i < bmChose.length; i++) {
    if (bmChose[i] != null) {
    bmChose[i].recycle();
    }
    }
    }}XML
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >    <GridView
            android:id="@+id/gv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="10dp"
            android:horizontalSpacing="1dp"
            android:numColumns="2"
            android:verticalSpacing="5dp" /></RelativeLayout><?xml version="1.0" encoding="utf-8"?>
    <ImageView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="100dp"
        android:layout_height="120dp" ></ImageView>
      

  3.   

    谢谢,今天终于搞明白了.对item组件的数据改变时,必须把对应在数组中的位置也改变,然后在调用adpter的刷新方法