Android Imageviewer更新不更改图标

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

因此,这里是我在MainActivity中的代码,当单击作为ImageView的appliance_图标时,它将引导我进入我的图库,我可以选择图片

 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();


        }
}