2015-11-19 4 views
5

私はアンドロイドを初めて使っています。ビットマップをBundleに渡したいしかし、私はそれのための解決策を見つけることができません。実際、私は混乱しています。私はダイアログの断片に画像を表示したい。しかし、私はバンドルに入れる方法を知らない。 PutByteArray()として送信する必要がありますか?しかし、ビットマップを引数として渡すと、間違った引数として表示されます。すべてのビットマップをバンドルに送るには

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(); 
+8

'Bitmap'は' Parcelable'、**しかし**より良いパスまたはあなたの 'Bitmap' – pskink

+2

HTTPを指している他のいくつかの' Uri'を渡し、Bitmap'は良い解決策ではありません '全体を渡すことです。 //stackoverflow.com/questions/12908048/passing-bitmap-between-two-activities ロジックを使用してバンドルに保存します。 – thepace

答えて

6

最初にそれを送信、意図に追加し、デコード前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); 

// Convertionは、私はそれを文字列としてイメージのパスまたはアドレスを送信し、上にロードすることが容易だと思う意思

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

FragmentsではIntentを使用することはできないと思いますか?私たちはそれのためにバンドルを使用する理由は? – Sayyaf

+0

更新されたコード – theLazyFinder

+7

を確認してください。単に 'b.putParcelable(" image "、bmp)'? – pskink

0

を経由して値を取得します向こう側。

画像がウェブアドレスの場合は、グライドまたはピカソのライブラリを使用してキャッシュすることができます。そのため、他のアクティビティやフラグメントでは2度読み込まれません。

+0

しかし、私はサードパーティのライブラリを使用することはできません。 plsは画像のサンプルコードを文字列として送信します。実際に私はuriを使い、活動のイメージを表示しました。そのイメージをクリックすると、そのイメージがDialogフラグメントに表示されます。 – Sayyaf

+0

私は文字列としてイメージを言いませんでした。私はパスを意味していました。イメージを表示していれば、完了したと思いますが、必要ならば答えを更新できます。 –

+0

問題は、直面している問題は、そのビットマップを使用して、ダイアログのフラグメントに送信し、それを表示する方法です。 Andriod Developersサイトのコードを理解できません。親切に助けていただければ幸いです。 – Sayyaf

11

ビットマップをバイト配列に変換する必要はありません。ビットマップをバンドルに直接入れることができます。ビットマップをバンドルするには、次のコードを参照してください。

bundle.putParcelable("BitmapImage",bitmapname); 

コード

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

に従うことによってバンドルからビットマップを取得し、私はそれが最終的に& ShashiRajanは、我々が直接ビットマップを渡すことができた#pskinkました。私はこのように実装しました。 MyAlert myAlert = new MyAlert(); Bundle b=new Bundle(); b.putParcelable("BitImage",bit); myAlert.setArguments(b); 私のような初心者にも役立つかもしれないと願っています。

1

バンドルを使用して画像を渡したい場合は、それが役立つと確信しています。

Bundle bundle = new Bundle(); 
bundle.putParcelable("bitmap", bitmap); 
fragment.setArguments(bundle); 
関連する問題