java – Android首选图像选择器 – 如何在DialogPreference中接收结果

我想知道如何从 DialogPreference的图像选择器流中获得结果.

我希望DialogPreference在onActivityResult之后被调用,所以它可以使用所选图像的Uri位置,在对话框中显示用户的图像预览,然后点击ok / cancel.

也许我需要在onActivityResult结束时设置一些东西,然后在DialogPreference中调用生命周期钩子,但我不确定.

到目前为止,逻辑是这样的:

ImagePreference.java

public class ImagePreference extends DialogPreference {

    View mView;

    public ImagePreference(Context context,AttributeSet attrs) {
        super(context,attrs);
        initWith(context,attrs);
    }

    private void initWith(Context context,AttributeSet attrs) {
        setWidgetLayoutResource(R.layout.pref_image_widget);
        setDialogLayoutResource(R.layout.pref_image_dialog);

    }

    @Override
    protected View onCreateDialogView() {
        mView = super.onCreateDialogView();

        ImageButton button = (ImageButton) mView.findViewById(R.id.add_image);
        button.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ((SettingsContract.Selectimage)getContext()).fromgallery();
            }
        });

        return mView;
    }

SettingsActivity.java

public class SettingsActivity extends AppCompatActivity
        implements SettingsContract.Selectimage {

    private static final int PICK_IMAGE_REQUEST = 1;

    // ...

    @Override
    public void fromgallery() {
        Intent intent = new Intent();
        // Show only images,no videos or anything else
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        // Always show the chooser (if there are multiple options available)
        startActivityForResult(Intent.createChooser(intent,"Select Picture"),PICK_IMAGE_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data) {
        super.onActivityResult(requestCode,resultCode,data);    
        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
            Uri uri = data.getData();
            // what to do here??
    }
}

解决方法

无法使用AlertDialog与ImageView结合使用.

您可以设置一个对话框,如下所示:https://stackoverflow.com/a/2115770/1985387

new AlertDialog.Builder(context)
    .setTitle("Title")
    .setMessage("Here is a preview")  //not necessary,you Could remove to just show image
    .setPositiveButton(android.R.string.yes,new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int which) { 
            // continue with delete
        }
     })
    .setNegativeButton(android.R.string.no,int which) { 
            // do nothing
        }
     })
    .setIcon(android.R.drawable.ic_dialog_alert)
     .show();

添加ImageView,可以在.show()之前添加

.setView(imageView);

您可以从像https://stackoverflow.com/a/9080762/1985387这样的URI加载ImageView:

Uri imguri = Uri.parse(uri);
imageView.setimageURI(null); 
imageView.setimageURI(imguri);

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...