簡體   English   中英

Android首選項圖像選取器 - 如何在DialogPreference中接收結果

[英]Android Preference Image Picker - how to receive result in DialogPreference

我想知道如何從DialogPreference中的Image Picker流程接收結果。

我希望在onActivityResult之后調用DialogPreference ,這樣它就可以使用所選圖像的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??
    }
}

你不能使用與ImageView結合的AlertDialog

您可以設置一個對話框,如下所示: 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, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) { 
            // do nothing
        }
     })
    .setIcon(android.R.drawable.ic_dialog_alert)
     .show();

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

.setView(imageView);

你可以加載ImageViewURI這樣https://stackoverflow.com/a/9080762/1985387

Uri imgUri = Uri.parse(uri);
imageView.setImageURI(null); 
imageView.setImageURI(imgUri);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM