2012-01-12 39 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