it-swarm.com.ru

onActivityResult не вызывается во фрагменте

Деятельность, в которой размещен этот фрагмент, получает имя onActivityResult, когда активность камеры возвращается.

Мой фрагмент запускает действие для результата с намерением, посланным камерой, чтобы сделать снимок. Приложение для работы с изображениями загружается нормально, делает снимок и возвращается. Однако onActivityResult никогда не срабатывает. Я установил точки останова, но ничего не сработало. Может ли фрагмент иметь onActivityResult? Я бы так подумал, поскольку это предоставленная функция. Почему это не срабатывает?

ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image);
myImage.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent cameraIntent = new Intent(Android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(cameraIntent, 1888);
    }
});

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if( requestCode == 1888 ) {
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        ((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo);
    }
}
789
Spidy

Хостинговая активность переопределяет onActivityResult(), но она не вызывала super.onActivityResult() для необработанных кодов результата. Очевидно, что хотя фрагмент и выполняет вызов startActivityForResult(), действие получает первый шанс при обработке результата. Это имеет смысл, если учесть модульность фрагментов. Как только я реализовал super.onActivityResult() для всех необработанных результатов, фрагмент получил возможность обработать результат.

А также из @siqing ответа:

Чтобы получить результат в вашем фрагменте, убедитесь, что вы вызываете startActivityForResult(intent,111); вместо getActivity().startActivityForResult(intent,111); внутри вашего фрагмента.

1147
Spidy

Я думаю, что вы позвонили getActivity().startActivityForResult(intent,111);. Вы должны позвонить startActivityForResult(intent,111);.

310
siqing

Вариант 1:

Если вы вызываете startActivityForResult() из фрагмента, вам следует вызвать startActivityForResult(), а не getActivity().startActivityForResult(), так как это приведет к фрагменту onActivityResult ().

Если вы не уверены, куда вы звоните по startActivityForResult() и как вы будете вызывать методы.

Вариант 2:

Поскольку Activity получает результат onActivityResult(), вам нужно будет переопределить onActivityResult() действия и вызвать super.onActivityResult() для распространения на соответствующий фрагмент для необработанных кодов результатов или для всех.

Если вышеупомянутые два варианта не работают, то обратитесь к варианту 3, поскольку он определенно будет работать.

Вариант 3:

Явный вызов фрагмента функции onActivityResult выглядит следующим образом.

В родительском классе Activity переопределите метод onActivityResult () и даже переопределите его в классе Fragment и вызовите, как показано в следующем коде.

В родительском классе:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
    fragment.onActivityResult(requestCode, resultCode, data);
}

В детском классе:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // In fragment class callback
}
232
Vinayak

У меня такая же проблема с ChildFragmentManager. Менеджер не будет передавать результат во вложенный фрагмент, вы должны сделать это вручную в базовом фрагменте.

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    Fragment fragment = (Fragment) getChildFragmentManager().findFragmentByTag(childTag);
    if (fragment != null) {
        fragment.onActivityResult(requestCode, resultCode, intent);
    }
}
76
MinceMan

Если вы не знаете фрагменты своей деятельности, просто перечислите их все и отправьте аргументы результата действия:

// In your activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}
76
ruX

Оригинальный пост.

FragmentActivity заменяет requestCode измененным. После этого, когда будет вызываться onActivityResult(), FragmentActivity анализирует старшие 16 битов и восстанавливает индекс исходного фрагмента. Посмотрите на эту схему:

Enter image description here

Если у вас есть несколько фрагментов на корневом уровне, проблем нет. Но если у вас есть вложенные фрагменты , например Fragment с несколькими вкладками внутри ViewPager, вы гарантированно столкнетесь с проблемой (или уже сталкивался с этим).

Поскольку внутри requestCode хранится только один индекс . Это индекс Fragment внутри его FragmentManager. Когда мы используем вложенные фрагменты, есть дочерние FragmentManagers, которые имеют свой собственный список фрагментов. Итак, необходимо сохранить всю цепочку индексов, начиная с корня FragmentManager.

Enter image description here

Как мы решаем эту проблему? Существует общее решение в этом посте .

GitHub: https://github.com/shamanland/nested-fragment-issue

57
Oleksii K.

Это один из самых популярных номеров. Мы можем найти много веток по этой проблеме. Но ни один из них не полезен для меня.

Таким образом, я решил эту проблему, используя это решение.

Давайте сначала поймем, почему это происходит.

Мы можем вызвать startActivityForResult напрямую из Fragment, но на самом деле механика позади все обрабатывается Activity.

Как только вы вызовете startActivityForResult из фрагмента, requestCode будет изменен, чтобы присоединить идентификацию фрагмента к коду. Это позволит Activity быть в состоянии отследить того, кто отправил этот запрос после получения результата.

Как только Activity будет перемещен обратно, результат будет отправлен в onActivityResult Activity с измененным requestCode, который будет декодирован в исходный идентификатор requestCode + Fragment. После этого Activity отправит результат Activity этому фрагменту через onActivityResult. И все это сделано.

Проблема в том, что:

Activity может отправить результат только фрагменту, который был прикреплен непосредственно к Activity, но не вложенному. Вот почему onActivityResult вложенного фрагмента никогда не будет вызываться, несмотря ни на что.

Решение

1) Начните Намерение в своем Фрагменте с помощью кода ниже:

       /** Pass your fragment reference **/
       frag.startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE = 12345

2) Теперь в переопределении родительской активности ** onActivityResult(): **

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }

Вы должны вызвать это в родительском действии, чтобы заставить это работать.

) В вашем фрагменте вызов:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {

       }
}

Вот и все. С помощью этого решения его можно применять для любого отдельного фрагмента, независимо от того, является он вложенным или нет. И да, это также охватывает все дела! Кроме того, коды также хорошие и чистые.

41
KishuDroid

ДЛЯ МНОГИХ ВСТРОЕННЫХ ФРАГМЕНТОВ (например, при использовании ViewPager во фрагменте)

в вашей основной деятельности:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

в вашем фрагменте:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    for (Fragment fragment : getChildFragmentManager().getFragments()) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}

в вашем вложенном фрагменте

Вызов деятельности

getParentFragment().startActivityForResult(intent, uniqueInstanceInt);

uniqueInstanceInt - замените его на int, которое является уникальным среди вложенных фрагментов, чтобы другой фрагмент не обработал ответ.

Получить ответ

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == uniqueInstanceInt ) {
        // TODO your code
    }
}

Внимание

Число от 0 до 65536 необходимо использовать в uniqueInstanceInt во избежание ошибок: "Можно использовать только младшие 16 битов для requestCode".

18
Luciano Marqueto

Я могу добавить два совета, если кто-то все еще не может сделать это. В файле Manifest.xml убедитесь, что хостинг-операция не завершилась при обратном вызове, и для запускаемой активности стандартным является режим запуска. Подробности см. Ниже:

Для активности хостинга установите для свойства no history значение false, если

Android:noHistory="false"

Для запуска действия установите стандартный режим запуска, если

Android:launchMode="standard"
14
jowett

Я также встретил эту проблему во фрагменте. И я назвал startActivityForResult в DialogFragment.

Но теперь эта проблема решена:
FragmentClassname.this.startActivityForResult.

10
Courysky

Я также столкнулся с той же проблемой, как только переместил этот блок кода вне Fragment в служебный класс с parentActivity передается как аргумент ,

Intent intent = new Intent(parentActivity, CameraCaptureActivity.class);
parentActivity.startActivityForResult(intent,requestCode);

Тогда я не получал никакого значения в методе onActivityResult этого Фрагмент, Впоследствии я изменил аргумент на Фрагмент, поэтому пересмотренное определение метода выглядело так:

Intent intent = new Intent(fragment.getContext(), CameraCaptureActivity.class);
fragment.startActivityForResult(intent,requestCode);

После этого я смог получить значение в onActivityResult в Fragment

9
Shamsul Arefin Sajib

Решение 1:

Вызовите startActivityForResult(intent, REQUEST_CODE); вместо getActivity().startActivityForResult(intent, REQUEST_CODE);.

Решение 2:

Когда вызывается startActivityForResult(intent, REQUEST_CODE);, вызывается onActivityResult(requestCode,resultcode,intent) действия, а затем вы можете вызвать fragments onActivityResult() отсюда, передав requestCode, resultCode and intent.

6
Amey Haldankar

В моем случае это была ошибка Android ( http://technet.weblineindia.com/mobile/onactivityresult-not-getting-called-in-nested-fragments-Android/ ), если вы используете поддерживаемое FragmentActivity, вы должны использовать getSupportFragmentManager вместо getChildFragmentManager:

List<Fragment> fragments = getSupportFragmentManager().getFragments();
if (fragments != null) {
    for (Fragment fragment : fragments) {
        if(fragment instanceof UserProfileFragment) {
            fragment.onActivityResult(requestCode, resultCode, data);
        }
    }
}
6
Hazlo8

ДЛЯ ВСТРОЕННЫХ ФРАГМЕНТОВ (например, при использовании ViewPager)

В вашей основной деятельности:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

В вашем основном фрагменте верхнего уровня (фрагмент ViewPager):

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    YourFragment frag = (YourFragment) getChildFragmentManager().getFragments().get(viewPager.getCurrentItem());
    frag.yourMethod(data);  // Method for callback in YourFragment
    super.onActivityResult(requestCode, resultCode, data);
}

В YourFragment (вложенный фрагмент):

public void yourMethod(Intent data){
    // Do whatever you want with your data
}
5
Jyotman Singh

Внутри вашего фрагмента звоните

this.startActivityForResult(intent, REQUEST_CODE);

где this ссылается на фрагмент. В противном случае сделайте, как сказал @Clevester:

Fragment fragment = this;
....
fragment.startActivityForResult(intent, REQUEST_CODE);

Я также должен был позвонить

super.onActivityResult(requestCode, resultCode, data);

в onActivityResult родительской активности, чтобы заставить его работать.

(Я адаптировал этот ответ из ответа @ Clevester.)

5
Suragch

Короче,

Во фрагменте объявляем Fragment fragment = this;

после этого используйте fragment.startActivityForResult.

Результат вернется в ActivityResult.

5
Clevester
public class takeimage extends Fragment {

    private Uri mImageCaptureUri;
    private static final int PICK_FROM_CAMERA = 1;
    private static final int PICK_FROM_FILE = 2;
    private String mPath;
    private ImageView mImageView;
    Bitmap bitmap = null;
    View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.activity_send_image, container, false);
        final String[] items = new String[] { "From Camera", "From SD Card" };
        mImageView = (ImageView)view.findViewById(R.id.iv_pic);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), Android.R.layout.select_dialog_item, items);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Select Image");

        builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                if (item == 0) {
                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    File file = new File(Environment.getExternalStorageDirectory(), "tmp_avatar_"
                        + String.valueOf(System.currentTimeMillis())
                        + ".jpg");
                    mImageCaptureUri = Uri.fromFile(file);

                    try {
                        intent.putExtra(
                            Android.provider.MediaStore.EXTRA_OUTPUT,
                            mImageCaptureUri);
                        intent.putExtra("return-data", true);

                        getActivity().startActivityForResult(intent,
                            PICK_FROM_CAMERA);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    dialog.cancel();
                } else {
                    Intent intent = new Intent();

                    intent.setType("image/*");
                    intent.setAction(Intent.ACTION_GET_CONTENT);

                    getActivity().startActivityForResult(
                        Intent.createChooser(intent,
                            "Complete action using"), PICK_FROM_FILE);
                }
            }
        });
        final AlertDialog dialog = builder.create();

        Button show = (Button) view.findViewById(R.id.btn_choose);
        show.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Switch the tab content to display the list view.
                dialog.show();
            }
        });

    return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode != Activity.RESULT_OK)
            return;

        if (requestCode == PICK_FROM_FILE) {
            mImageCaptureUri = data.getData();
            // mPath = getRealPathFromURI(mImageCaptureUri); //from Gallery

            if (mPath == null)
                mPath = mImageCaptureUri.getPath(); // from File Manager

            if (mPath != null)
                bitmap = BitmapFactory.decodeFile(mPath);
        } else {
            mPath = mImageCaptureUri.getPath();
            bitmap = BitmapFactory.decodeFile(mPath);
        }
        mImageView.setImageBitmap(bitmap);  
    }

    public String getRealPathFromURI(Uri contentUri) {
        String [] proj = {MediaStore.Images.Media.DATA};
        Cursor cursor = managedQuery(contentUri, proj, null, null,null);

        if (cursor == null) return null;

        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
} 
3
shakirullah orakzai
  1. Вы можете просто переопределить BaseActivity onActivityResult для фрагмента baseActivity.startActivityForResult.

  2. На BaseActivity добавьте интерфейс и переопределите onActivityResult.

    private OnBaseActivityResult baseActivityResult;
    public static final int BASE_RESULT_RCODE = 111;
    public interface OnBaseActivityResult{
        void onBaseActivityResult(int requestCode, int resultCode, Intent data);
       }
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(getBaseActivityResult() !=null && requestCode == BASE_RESULT_RCODE){
        getBaseActivityResult().onBaseActivityResult(requestCode, resultCode, data);
        setBaseActivityResult(null);
    }
    
  3. On Fragment реализует OnBaseActivityResult

    @Override
    public void onBaseActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d("RQ","OnBaseActivityResult");
    if (data != null) {
        Log.d("RQ","OnBaseActivityResult + Data");
        Bundle arguments = data.getExtras();
      }
    }
    

Этот обходной путь поможет.

3
Khaled Lela

Если вышеупомянутая проблема встречается в логин Facebook, тогда вы можете использовать приведенный ниже код в родительской активности вашего фрагмента, например:

Fragment fragment = getFragmentManager().findFragmentById(Android.R.id.tabcontent);
fragment.onActivityResult(requestCode, resultCode, data);

Или:

Fragment fragment = getFragmentManager().findFragmentById("fragment id here");
fragment.onActivityResult(requestCode, resultCode, data);

И добавьте приведенный ниже вызов в свой фрагмент ...

callbackManager.onActivityResult(requestCode, resultCode, data);
3
Ketan Patel

В большинстве этих ответов постоянно говорится, что вы должны вызывать super.onActivityResult(...) на вашем хосте Activity для вашего Fragment. Но это, похоже, не работает для меня.

Итак, в вашем Хосте Activity вы должны вместо этого вызвать свой FragmentsonActivityResult(...). Вот пример.

public class HostActivity extends Activity {

    private MyFragment myFragment;

    protected void onActivityResult(...) {
        super.onActivityResult(...);
        this.myFragment.onActivityResult(...);
    }
}

В какой-то момент вашего HostActivity вам нужно будет присвоить this.myFragmentFragment, который вы используете. Или используйте FragmentManager, чтобы получить Fragment вместо сохранения ссылки на него в своем HostActivity. Кроме того, проверьте null, прежде чем пытаться вызвать this.myFragment.onActivityResult(...);.

3
prolink007

Моя проблема заключалась в активности хоста. Я нашел его с набором Android:launchMode="standard" Я удалил его временно и он работает!

1
Chulo

Ваш код имеет вложенный фрагмент. Вызов super.onActivityForResult не работает

Вы не хотите изменять каждое действие, из которого может быть вызван ваш фрагмент, или выполнять обход всех фрагментов в цепочке фрагментов.

Вот одно из многих работающих решений. создайте фрагмент на лету и подключите его непосредственно к операции с помощью менеджера фрагментов поддержки. Затем вызовите startActivityForResult из вновь созданного фрагмента.

private void get_UserEmail() {

    if (view == null) {
        return;
    }
    ((TextView) view.findViewById(R.id.tvApplicationUserName))
            .setText("Searching device for user accounts...");

    final FragmentManager fragManager = getActivity().getSupportFragmentManager();

    Fragment f = new Fragment() {
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            startActivityForResult(AccountPicker.newChooseAccountIntent(null, null,
                    new String[]{"com.google"}, false, null, null, null, null), REQUEST_CODE_PICK_ACCOUNT);
        }

        @Override
        public void onActivityResult(int requestCode, int resultCode,
                                     Intent data) {
            if (requestCode == REQUEST_CODE_PICK_ACCOUNT) {
                String mEmail = "";
                if (resultCode == Activity.RESULT_OK) {
                    if (data.hasExtra(AccountManager.KEY_ACCOUNT_NAME)) {
                        mEmail = data
                                .getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                    }
                }
                if (mActivity != null) {
                    GoPreferences.putString(mActivity, SettingApplication.USER_EMAIL, mEmail);
                }
                doUser();
            }
            super.onActivityResult(requestCode, resultCode, data);
            fragManager.beginTransaction().remove(this).commit();
        }
    };
    FragmentTransaction fragmentTransaction = fragManager
            .beginTransaction();
    fragmentTransaction.add(f, "xx" + REQUEST_CODE_PICK_ACCOUNT);
    fragmentTransaction.commit();
}
1
danny117

У меня есть сильное подозрение, что все ответы здесь - не более чем взломы. Я перепробовал их всех и многих других, но без какого-либо достоверного заключения, поскольку всегда есть какая-то глупая проблема. Я, например, не могу полагаться на противоречивые результаты. Если вы посмотрите официальную Android документацию API для фрагментов, вы увидите, что Google четко заявляет следующее:

Вызовите startActivityForResult (Intent, int) из фрагмента, содержащего Activity.

Смотрите: Android Fragment API

Таким образом, может показаться, что наиболее правильным и надежным подходом было бы фактически вызвать startActivityForResult () из действия хостинга, а также обработать результирующий onActivityResult ( ) оттуда.

1
Chris

Как упоминал Олли С, существует активная ошибка для библиотеки поддержки, использующей возвращаемые значения для onActivityResult, когда вы используете вложенные фрагменты. Я просто ударил : .

Смотрите --- (Fragment.onActivityResult не вызывается, когда requestCode! =.

1
chaqke

Я просто делаю обходной метод:

public static Fragment _tempFragment = null;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(_tempFragment != null)
        _tempFragment.onActivityResult(requestCode, resultCode, data);
}

В вашем Фрагменте перед startActivityResult установите

MainActivity._tempFragment = this;

После onActivityResult <- во фрагменте

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);

     // Do your job
     {

     }
     MainActivity._tempFragment = null;
}
0
Ah Lam

Если вы используете вложенные фрагменты, это также работает:

getParentFragment().startActivityForResult(intent, RequestCode);

В дополнение к этому вы должны вызвать super.onActivityResult из родительского действия и заполнить метод onActivityResult фрагмента.

0
Oguz Ozcan

Просто используйте приведенный ниже код для фрагмента.

@Override
public void onOtherButtonClick(ActionSheet actionSheet, int index) {

    if (index == 1)
    {
        Intent intent = new Intent(Intent.ACTION_PICK,
                                   Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        intent.setType("image/*");
        startActivityForResult(Intent.createChooser(intent,
                                                    "Select Picture"), 1);
     }
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == 1) {
        if (requestCode == 1) {
            Uri selectedImageUri = data.getData();
            //selectedImagePath = getPath(selectedImageUri);
        }
    }
}

onActivityResult будет вызывать без вызова своего родителя.

0
Kirtikumar A.

Один из самых простых способов - начать действие с вашего фрагмента.

startActivity(ActivityName);

Затем добавьте свой вызов startActivityForResult(intent,"1"); из своей деятельности и добавьте onActivityResult в свою деятельность

startActivityForResult(intent,"1");

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
    fragment.onActivityResult(requestCode, resultCode, data);
// perform other activity result like fetching from Uris or handling cursors

finish(); // finish the activity will  get to back to your fragment.
}
0
Rohit Goyal

Одна точка, ни у кого нет mention, которая гарантирует, что ваша активность хоста режим запуска не должна быть установлена ​​в singleInstance или singleTask.

onActivityResult не будет работать, если ваш режим запуска установлен в SingleInstance или SingleTask. или вы называете свою деятельность с помощью этих IntentFilters

Режим запуска standard или singleTop будет работать нормально.

0
Xar E Ahmer

Если есть проблема с методом onActivityResult, который находится внутри класса фрагмента, и вы хотите обновить что-то, что также находится внутри класса фрагмента, используйте:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(resultCode == Activity.RESULT_OK)
    {
        // If the user had agreed to enabling Bluetooth,
        // populate the ListView with all the paired devices.
        this.arrayDevice = new ArrayAdapter<String>(this.getContext(), R.layout.device_item);
        for(BluetoothDevice bd : this.btService.btAdapater.getBondedDevices())
        {
            this.arrayDevice.add(bd.getAddress());
            this.btDeviceList.setAdapter(this.arrayDevice);
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

Просто добавьте this.variable, как показано в коде выше. В противном случае метод будет вызван в родительском действии, и переменная не будет обновлена ​​для текущего экземпляра.

Я также проверил это, поместив этот блок кода в MainActivity, заменив this классом HomeFragment и сделав переменные статическими. Я получил результаты, как я ожидал.

Поэтому, если вы хотите, чтобы класс фрагмента имел собственную реализацию onActivityResult, ответом является приведенный выше пример кода.

0
Evgeny Danilenko

Я решил эту проблему, написав базовый класс, который расширяет Fragment, и в onactivityresult операции я определил текущий запущенный фрагмент, используя fragmenttag. Затем я вызываю пользовательский метод в классе фрагмента. Это вызовет событие в текущем фрагменте.

0
Bytecode