将图库图像数据从Activity传递到DialogPreferences

时间:2016-05-19 17:50:15

标签: android image android-fragments

我创建了一个设置活动。其中我有很多碎片。 其中一个有Logo设置(DialogPreferences),我需要从库中选择图像,并需要将该图像显示到DialogPreferences的ImageView中。

现在,我在Settings活动的onActivityResult中获取了Gallery图像。但是,我需要将图像数据导入配置(片段) - > LogoPreferences(DialogPreferences)。

所以,我的问题是,如何从onActivityResult(Activity)获取图像数据到LogoPreferences(即DialogPreference,它在Configuration片段内)。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以将从Bitmap获得的onActivityResult()图片转换为 ByteArray ,然后将数组转换回LogoPreferences活动(或以较为明确的任何一项)您想要数据去的活动)。这是你可以做的事情:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // Check to see the result is from the activity you are targeting
    if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
        Uri selectedImage = data.getData();
        try {
            Bitmap bitmapImage = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
            Log.i("Image Path", selectedImage.getPath());

            // Convert bitmap to byte array
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bitmapImage.compress(Bitmap.CompressFormat.PNG, 0 /*ignored if PNG*/, bos);
            byte[] bitmapdata = bos.toByteArray();

            Bundle b = new Bundle();
            b.putByteArray("byteArray", bitmapdata);
            Intent intent = new Intent(this, LogoPreferences.class);
            intent.putExtras(b);
            startActivity(intent);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

然后要在LogoPreferences活动中解码该字节数组,您可以这样做:

if(getIntent().hasExtra("byteArray")) {
        Bitmap bitmap = BitmapFactory.decodeByteArray(
                getIntent().getByteArrayExtra("byteArray"), 0, getIntent().getByteArrayExtra("byteArray").length);
        // Optionally set the Bitmap to an ImageView
        ImageView imv = new ImageView(this);
        imv.setImageBitmap(bitmap);
      }

希望它有所帮助!