Android Imageviewer更新不更改图标
因此,这里是我在MainActivity中的代码,当单击作为ImageView的appliance_图标时,它将引导我进入我的图库,我可以选择图片Android Imageviewer更新不更改图标,android,imageview,Android,Imageview,因此,这里是我在MainActivity中的代码,当单击作为ImageView的appliance_图标时,它将引导我进入我的图库,我可以选择图片 final Dialog addingDialog = new Dialog(MainActivity.this); addingDialog.setTitle("Adding New Appliance"); addingDialog.setContentView(R.layout.adding_appliance); final But
final Dialog addingDialog = new Dialog(MainActivity.this);
addingDialog.setTitle("Adding New Appliance");
addingDialog.setContentView(R.layout.adding_appliance);
final Button done = (Button)addingDialog.findViewById(R.id.done);
final Button appliance_color = (Button)addingDialog.findViewById(R.id.appliance_color);
final ImageView appliance_icon = (ImageView)addingDialog.findViewById(R.id.appliance_icon);
appliance_icon.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
appliance_icon.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}
});
我的问题是,每当我选择一张新图片时,它不会更新我的imageview,而且imageview只会在我第二次按下它时更新
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
picturePath = cursor.getString(columnIndex);
cursor.close();
}
}
你可能想研究这个问题,它可能会满足你的需要。
您能用onActivityResult方法设置图像吗
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
picturePath = cursor.getString(columnIndex);
cursor.close();
updatePicture();
}
}
public void updatePicture() {
appliance_icon.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}
在类开始之前声明图像视图
ImageView appliance_icon;
单击()时在imageview中使用此选项
在onActivityResult中使用此选项
@Override
public void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (requestCode == 100 && resultCode == RESULT_OK && data != null) {
new AsyncTask<Void, Void, Void>() {
Bitmap bmImg=null;
@Override
protected Void doInBackground(Void... params) {
final Uri selectedImage = data.getData();
final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(selectedImage, "image/*");
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
bmImg = BitmapFactory.decodeFile(cursor.getString(columnIndex));
cursor.close();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
appliance_icon .setImageBitmap(bmImg);
}
}.execute();
}
}
@覆盖
ActivityResult上的公共void(int请求代码、int结果代码、最终意图数据){
if(requestCode==100&&resultCode==RESULT\u OK&&data!=null){
新建异步任务(){
位图bmImg=null;
@凌驾
受保护的Void doInBackground(Void…参数){
最终Uri selectedImage=data.getData();
最终意图=新意图(“com.android.camera.action.CROP”);
intent.setDataAndType(选择图像,“图像/*”);
字符串[]filePathColumn={MediaStore.Images.Media.DATA};
Cursor Cursor=getContentResolver().query(selectedImage,filePathColumn,null,null);
如果(光标!=null){
cursor.moveToFirst();
int columnIndex=cursor.getColumnIndex(filePathColumn[0]);
bmImg=BitmapFactory.decodeFile(cursor.getString(columnIndex));
cursor.close();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
设备图标设置图像位图(bmImg);
}
}.execute();
}
}
这就是我的代码来源,但我的问题是,我的imageview来自对话框,因此它的布局不是来自Main活动,因此我无法使用代码。请参见cursor.close()我将其替换,并将其放在StartActivityForresult之后。结果出现错误,因为设备图标来自对话框。在此处初始化变量g的位置?image是imageview变量。ImageView图像=(ImageView)findViewById(R.id.xxxx);imageview不在mainactivity上,它通过对话框调用,请参见imageview设备图标=(imageview)findViewById(R.id.appliance图标)上方的编辑代码;设备图标设置图像位图(bmImg);在OnPostExecute中使用此代码我得到了一个解决方案。在类开始点之前声明用户ImageView设备图标,并使用编辑过的代码。在类级别和onActivityResult(…)中声明设备图标
,在该图像视图上设置位图
@Override
public void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (requestCode == 100 && resultCode == RESULT_OK && data != null) {
new AsyncTask<Void, Void, Void>() {
Bitmap bmImg=null;
@Override
protected Void doInBackground(Void... params) {
final Uri selectedImage = data.getData();
final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(selectedImage, "image/*");
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
bmImg = BitmapFactory.decodeFile(cursor.getString(columnIndex));
cursor.close();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
appliance_icon .setImageBitmap(bmImg);
}
}.execute();
}
}