Вопрос по android – Неправильный код запроса в onActivityResult
Я начинаю новую активность из моего фрагмента с
<code>startActivityForResult(intent, 1); </code>
и хотите обработать результат в родительском действии фрагмента:
<code>@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode); if (requestCode == 1) { // bla bla bla } } </code>
Проблема в том, что я так и не получилrequestCode
Я только что написал наstartActivityForResult()
.
Я получил что-то вроде0x40001
, 0x20001
и т.д. с установленным случайным старшим битом. Документы ничего не говорят об этом. Есть идеи?
super.onActivityResult(requestCode, resultCode, data)
вActivity
(если вы переопределитеonActivityResult
)
at this
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
...
default:
super.onActivityResult(requestCode, resultCode, data);
}
}
и позвонитьstartActivityForResult(intent, requestCode)
внутри вашегоFragment
оддержки v4 индекс фрагмента кодируется в верхних 16 битах кода запроса, а код запроса - в нижних 16 битах. Индекс фрагмента позже используется для поиска правильного фрагмента для доставки результата.
Следовательно, для Activity запущен объект фрагмента формы, обработайте onActivityResult requestCode, как показано ниже:
originalRequestCode = changedRequestCode - (indexOfFragment << 16)
6 = 196614 - (3 << 16)
Easier:
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
}
}
startActivityForResult()
от твоегоFragment
, Когда вы делаете это,requestCode
измененActivity
который владеетFragment
.
Если вы хотите получить правильныйresultCode
в своей деятельности попробуйте это:
Изменить:
startActivityForResult(intent, 1);
Для того, чтобы:
getActivity().startActivityForResult(intent, 1);
startActivityForResult
Error: User Rate Limit ExceededonActivityResult
Error: User Rate Limit Exceededsuper.onActivityResult
Error: User Rate Limit ExceededonActivityResult
Error: User Rate Limit ExceededonActivityResult
Error: User Rate Limit ExceededonActivityResult
Error: User Rate Limit Exceeded