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
}
Есть идеи, что с этим не так?
Спасибо!
Ответы
Ответ 1
Чтобы вызвать onActivityResult()
в фрагменте, вы должны вызвать версию фрагмента startActivityForResult()
, а не активность. Поэтому в коде фрагмента замените
getActivity().startActivityForResult(galleryIntent, PICK_IMAGE);
с
startActivityForResult(galleryIntent, PICK_IMAGE);
Ответ 2
С помощью этого кода:
Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
getActivity().startActivityForResult(galleryIntent, PICK_IMAGE);
OnActivityResult должен находиться в Activity, который содержит фрагмент. Оттуда вы можете вызывать любой метод фрагмента, а не фрагмент.
MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);
myFragment .onCameraResult(requestCode, resultCode, intent);
делать все, что захотите
Ответ 3
Попробуйте этот фрагмент:
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);
}
}