Sayyaf
Sayyaf

Reputation: 326

How to send the bitmap into bundle

I'm new to android. I want to pass bitmap into Bundle. But I can't find any solution for it. Actually, I'm confused. I want to display an image in a Dialog fragment. But I don't know how to put into Bundle. Should I send as PutByteArray()? But if I pass bitmap as an argument, it is stating as a wrong argument.

Here is my code:

public class MyAlert extends DialogFragment {
  Bitmap b;
  public MyAlert newInstance(Bitmap b) {
    this.b=b;
    MyAlert frag=new MyAlert();
    Bundle args=new Bundle();
    args.put("bitByte",b);
    frag.setArguments(args);
    return frag;
  }

  @Override
  public Dialog onCreateDialog(Bundle savedInstanceState) {
    Bitmap bitmap=getArguments().getByteArray("bitByte");
    return new AlertDialog().Builder(getActivity());

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()).setView(R.id.fragid).create();

Upvotes: 16

Views: 24620

Answers (5)

Sana Ebadi
Sana Ebadi

Reputation: 7220

if you are using NavigationComponent, you should use safeArgs !

you can put arguments in nav_graph like this :

<argument
        android:name="profileImage"
        app:nullable="true"
        app:argType="android.graphics.Bitmap" />

and send it like it : (First Fragment)

findNavController().navigate(SettingFragmentDirections.actionSettingFragmentToHomeFragment(bitmap))

and give it like this : (Second Fragment)

 val bitmapimage =
            arguments?.getParcelable<Bitmap>("profileImage")


        user_profile_img.setImageBitmap(bitmapimage)

read more : https://developer.android.com/guide/navigation/navigation-pass-data

Upvotes: 1

chitra Sathwara
chitra Sathwara

Reputation: 75

If you want to pass image using bundle then i am sure it will help you.

Bundle bundle = new Bundle();
bundle.putParcelable("bitmap", bitmap);
fragment.setArguments(bundle);

Upvotes: 4

Shashi Ranjan
Shashi Ranjan

Reputation: 651

No need to convert bitmap to byte array. You can directly put bitmap into bundle. Refer following code to put bitmap into bundle.

bundle.putParcelable("BitmapImage",bitmapname);

Get bitmap from Bundle by following code

Bitmap bitmapimage = getIntent().getExtras().getParcelable("BitmapImage");

Upvotes: 40

Ashkan Ghodrat
Ashkan Ghodrat

Reputation: 3222

I think it is easier to send the path or address of the image as a string and load it on the other side.

If the image is a web address, you can use Glide or Picasso libraries and cache them, so on the other activities or fragments it will not load twice.

Upvotes: 0

Amarjit
Amarjit

Reputation: 4357

First of all convert it to a Byte array before adding it to intent, send it out, and decode.

//Convertion to byte array

  ByteArrayOutputStream stream = new ByteArrayOutputStream();
  bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
  byte[] byteArray = stream.toByteArray();

Bundle b = new Bundle();
b.putByteArray("image",byteArray);


  // your fragment code 
fragment.setArguments(b);

get Value via intent

byte[] byteArray = getArgument().getByteArrayExtra("image");
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

Upvotes: 18

Related Questions