2012-01-12 11 views
27

onActivityResult()メソッドが呼び出されないため、Androidのアルバムから画像を読み込む際に問題があります。アクティビティがフラグメントから開始されたときにonActivityResult()が呼び出されない

これは私が書いたコードは(フラグメントではない活動から呼び出される)である:

Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
getActivity().startActivityForResult(galleryIntent, PICK_IMAGE); 

ところで、私はonActivityResult()を定義しているが、それがトリガー決してます:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d(TAG, "onActivityResult"); // not printed 
} 

どのようなアイデアがこれに間違っていますか?

ありがとうございます!

+3

getActivity().startActivityForResult(galleryIntent, PICK_IMAGE); 

を置き換える、super.onActivityResult(requestCode、resultCodeが、データを)コンストラクタを追加します。 – Venky

+0

私は質問を編集しました。実際、私のコードはすでにその行を持っています。 –

+0

ギャラリー右から画像を選択する必要がありますか? – Venky

答えて

111

を好きなそこに行うための

MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.fragment); 
myFragment .onCameraResult(requestCode, resultCode, intent); 

、あなたがいないアクティビティの、startActivityForResult()のフラグメントのバージョンを呼び出す必要があります。だからあなたのフラグメントのコードでは、

startActivityForResult(galleryIntent, PICK_IMAGE); 
+8

作業を断片化に変換するときに間違いを簡単に:-) – Kuffs

+2

WOWはうまくいきました:)私たちは常に断片的にgetActivity()を使用しています: – Javier

+1

これは正しい答えでなければなりません。あなたの断片の中のメソッドを呼び出すことは回避策です – irwinb

-2

はこのスニペットを試してみてください:このコードで

Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); 
    intent.setType("image/*"); 
    intent.putExtra("return-data", true); 
    startActivityForResult(intent, 1); 


    @Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 

     case 1: 
      if(requestCode == 1 && data != null && data.getData() != null){ 
       Uri _uri = data.getData(); 

       if (_uri != null) { 
        Cursor cursor = getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null); 
        cursor.moveToFirst(); 
        final String imageFilePath = cursor.getString(0); 
        File photos= new File(imageFilePath); 
        imageView.setImageBitmap(bitmap); 
        cursor.close(); 
       } 
      } 
      super.onActivityResult(requestCode, resultCode, data); 
     } 
    } 
+6

なぜ「super.onActivityResult(requestCode、resultCode、data);」と呼びますか?二回?? –

16

Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
getActivity().startActivityForResult(galleryIntent, PICK_IMAGE); 

onActivityResultがフラグメントを含む活動でなければなりません。そこからフラグメント内のメソッドではなく、そのメソッドを呼び出すことができます。フラグメントで呼び出さonActivityResult()を持っているために、あなたが

+1

私はそれを前に見たことがないと信じられない!ありがとう:) –