Неверный запросКод в onActivityResult

Я начинаю новую деятельность из своего фрагмента с помощью

startActivityForResult(intent, 1); 

И хотите обработать результат в родительской активности фрагмента

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode); if (requestCode == 1) { // bla-bla-bla } } 

Проблема в том, что я никогда не получал requestCode, который я только что отправил в startActivityForResult. Я получил что-то вроде 0x40001, 0x20001 и т. Д. С произвольным старшим битом. Документы ничего не говорят об этом. Есть идеи?

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

Если вы хотите получить правильный resultCode в своей деятельности, попробуйте это:

Изменить:

 startActivityForResult(intent, 1); 

Для того, чтобы:

 getActivity().startActivityForResult(intent, 1); 

Код запроса не является ошибочным. При использовании фрагментов библиотеки поддержки v4 индекс фрагмента кодируется в верхние 16 бит кода запроса, а ваш код запроса находится в нижних 16 битах. Индекс фрагмента позже используется для поиска правильного фрагмента для доставки результата.

Следовательно, для Начала работы с обработкой фрагмента объекта objectActivityResult requestCode, как показано ниже: например, вы можете декодировать этот код запроса как:

OriginalRequestCode = changedRequestCode – (indexOfFragment << 16) 6 = 196614 – (3 << 16)

Если вы предоставляете постоянную публикацию, а затем используете в startActivityResult

пример:

 public static final int REQUEST_CODE =1; getActivity().startActivityForresult(intent, REQUEST_CODE); 

Вы также можете определить
super.onActivityResult(requestCode, resultCode, data)
В onActivityResult (если вы переопределите onActivityResult ) на этом

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

И вызовите startActivityForResult(intent, requestCode) внутри вашего Fragment

Полегче:

int unmaskedRequestCode = requestCode & 0x0000ffff

Проверьте нижние 16 бит, просто разоблачите его, делая логический И с верхними 16 битами с нулевым значением

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { final int unmaskedRequestCode = requestCode & 0x0000ffff if(unmaskedRequestCode == ORIGINAL_REQUEST_CODE){ //Do stuff } } 
Intereting Posts
Объект пользовательского интерфейса, созданный с помощью XML, не обрабатывается в Android Marshmallow Ошибка зависимости при использовании aar-библиотеки Извлечение данных из базы Создание модульных приложений Android на Eclipse Android android.database.CursorIndexOutOfBoundsException: запрошенный индекс x с размером x Изображение альфа по умолчанию Android-браузер Проблема с Smack в приложении для чата Facebook для Android: Connection.getRoster (). GetEntries () всегда пуст Как поймать событие кнопки «Назад» в Android? IllegalArgumentException: файл содержит разделитель путей Не удалось определить зависимости задачи Как определить и использовать системное свойство в Android Instrumentation test? Использовать видеочат в фоновом режиме, например, Skype с помощью WebRTC на Android CursorLoader отменяется, когда действие приостановлено Как преобразовать BitmapDescriptor в drawable в android для просмотра изображений Как я могу отобразить круг задач, посвященный голосовой тематике?