Android 安卓:从gallery中选取图像,并在alert对话框中设置图像

Android 安卓:从gallery中选取图像,并在alert对话框中设置图像,android,imageview,android-alertdialog,Android,Imageview,Android Alertdialog,单击浮动操作按钮时,会出现一个警报对话框,对话框内有一个图像视图和一个图像按钮。单击“图像”按钮,屏幕将移动到图库,单击其中一个图像后,图库关闭,图像视图应设置为所选图像 这是我的初衷,但在当前代码中似乎存在缺陷。我设法去了画廊,拿起一张照片,就这样。未在对话框的图像视图上设置选定图像 下面是定义单击浮动操作按钮时的操作的代码 fabAddACategory = (FloatingActionButton) findViewById(R.id.fabAddNewCategory);

单击浮动操作按钮时,会出现一个警报对话框,对话框内有一个图像视图和一个图像按钮。单击“图像”按钮,屏幕将移动到图库,单击其中一个图像后,图库关闭,图像视图应设置为所选图像

这是我的初衷,但在当前代码中似乎存在缺陷。我设法去了画廊,拿起一张照片,就这样。未在对话框的图像视图上设置选定图像

下面是定义单击浮动操作按钮时的操作的代码

    fabAddACategory = (FloatingActionButton) findViewById(R.id.fabAddNewCategory);
    fabAddACategory.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LayoutInflater inflater = getLayoutInflater();
            layout = inflater.inflate(R.layout.dialog_add_a_new_category, null);
            ivCategoryImage = (ImageView) layout.findViewById(R.id.ivCategoryImage);
            final EditText etCategoryTitle = (EditText) layout.findViewById(R.id.etCategoryTitle);

            alertDialog = new AlertDialog.Builder(ManageCategoriesActivity.this)
                    .setView(layout)
                    .setPositiveButton(getString(R.string.create), null)
                    .setNegativeButton(getString(R.string.cancel), null)
                    .create();

            alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
                @Override
                public void onShow(DialogInterface dialog) {
                    Button btnCreate = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);

                    btnCreate.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            String categoryTitle = etCategoryTitle.getText().toString();

                        }
                    });

                    ImageButton ibAdd = (ImageButton) layout.findViewById(R.id.ibAdd);
                    ibAdd.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            Intent chooseImageFromGallery = new Intent();
                            chooseImageFromGallery.setType("image/*");
                            chooseImageFromGallery.setAction(Intent.ACTION_GET_CONTENT);

                            try {
                                chooseImageFromGallery.putExtra("return-data", true);
                                startActivityForResult(chooseImageFromGallery, PICK_IMAGE);
                            } catch (ActivityNotFoundException e) {

                            }
                        }
                    });
                }
            });
            alertDialog.show();
        }
    });
下面这个重写的
onActivityResult()
方法定义了选择图像后的操作。根据此部分,应在图像视图上设置新选定的图像

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == PICK_IMAGE && resultCode == Activity.RESULT_OK && null != data) {
        Bundle extra = data.getExtras();
        if(extra != null) {
            Bitmap picture = extra.getParcelable("data");
            ivCategoryImage.setImageBitmap(picture);
        }
    }
}

当您放置断点和调试或使用日志时,
onActivityResult
是否调用过?是的,我在
onActivityResult
方法中调用了toast,当我在库中选择一个图像时它就出来了。所以
意图数据
参数为空?哦,我没有考虑过这种情况。那么我应该在代码中修改什么呢?我并不是说
数据
必须为null,但请检查该选项,这也取决于外部图像库的意图,不应该为null,但
getExtras()
并不总是像在代码中那样返回位图。最好的方法是获取拾取图像的
Uri
,然后从contentResolver加载它