当Activity从Fragment开始时,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 } 

任何想法有什么问题吗?

谢谢!

Solutions Collecting From Web of "当Activity从Fragment开始时,onActivityResult()不会被调用"

要在片段中调用onActivityResult() ,您应该调用片段的startActivityForResult()版本,而不是活动的。 所以在你的片段代码中,replace

 getActivity().startActivityForResult(galleryIntent, PICK_IMAGE); 

 startActivityForResult(galleryIntent, PICK_IMAGE); 

有了这个代码:

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

onActivityResult必须位于包含Fragment的Activity中。 从那里你可以调用任何片段的方法,而不是在片段中。

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

在那里做任何你想要的

试试这个片段:

  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); } }