2012-01-12 36 views
27

從Android中的相冊導入圖片時出現問題,因爲從不調用onActivityResult()方法。活動從片段開始時未調用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

添加構造,super.onActivityResult(requestCode,resultCode爲,數據); – Venky 2012-01-12 17:30:47

+0

我編輯了這個問題,的確我的代碼已經有了這一行。 – 2012-01-12 17:39:05

+0

您需要從圖庫中選擇圖片吧? – Venky 2012-01-12 17:44:49

回答

111

要有onActivityResult()稱爲片段,你應該叫片段的版本startActivityForResult(),不活動的。因此,在你片段的代碼,替代

getActivity().startActivityForResult(galleryIntent, PICK_IMAGE); 

startActivityForResult(galleryIntent, PICK_IMAGE); 
+8

在將活動轉換爲碎片時很容易犯這個錯誤:-) – Kuffs 2012-04-06 09:48:56

+2

WOW工作:)很好,我們總是在片段中使用getActivity():)幫助我很多 – Javier 2013-01-07 23:29:11

+1

這應該是正確的答案,另一種方法調用你的片段內的方法是一種解決方法 – irwinb 2013-01-24 16:42:20

-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);」兩次??! – 2013-09-16 13:33:06

16

有了這個代碼:

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

的onActivityResult必須在包含該片段的活動。從那裏你可以調用片段的任何方法,而不是在片段中。

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

在那裏做任何你想做

+1

不敢相信我以前沒有看到它!謝謝:) – 2012-01-13 08:58:03