我想知道如何从
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();
.setView(imageView);
您可以从像https://stackoverflow.com/a/9080762/1985387这样的URI加载ImageView:
Uri imgUri = Uri.parse(uri); imageView.setImageURI(null); imageView.setImageURI(imgUri);