

整个布局是一个gridview, 我在自己定义的adpter中利用给每个item添加数据,并且图片长按和图片名长按功能也写在getview()中,可是当我如图修改文件名时,文件名却不会被修改,长按图片选择了图库中的图片替换,可是onActivityResult()是在activity中的,怎么才能将返回的位图传到adpter中来修改该i被选中的tem的图片,,,,纠结了很久,看起来很简单的功能可是一直没实现出来,难道在adpter中的线程不是主线程,还不允许修改组件?
------解决思路----------------------
修改完后调用适配器的notifyDataSetChanged()刷新一下
------解决思路----------------------
闲来无事 给楼主写了个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>