onActivityResult () не вызывается, когда активность начинается с фрагмента - PullRequest
27 голосов
/ 12 января 2012

У меня проблема с импортом изображения из альбома в 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 ]

112 голосов
/ 17 марта 2012

Чтобы вызвать во фрагменте onActivityResult(), необходимо вызвать версию фрагмента startActivityForResult(), а не активность. Поэтому в коде вашего фрагмента замените

getActivity().startActivityForResult(galleryIntent, PICK_IMAGE);

с

startActivityForResult(galleryIntent, PICK_IMAGE);
16 голосов
/ 13 января 2012

С этим кодом:

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

делать там что хочешь

0 голосов
/ 12 января 2012

Попробуйте этот фрагмент:

    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);
        }
    }   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...