Вопрос по android – Неправильный код запроса в onActivityResult

259

Я начинаю новую активность из моего фрагмента с

<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 и т.д. с установленным случайным старшим битом. Документы ничего не говорят об этом. Есть идеи?

Error: User Rate Limit ExceededonActivityResult not being called in Fragment PhoneixS

Ваш Ответ

6   ответов
2


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

0

  getActivity().startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);

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

if (requestCode == PLACE_PICKER_REQUEST) {
            if (resultCode == RESULT_OK) {    
     //what ever you want to do
            }
25

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

Следовательно, для Activity запущен объект фрагмента формы, обработайте onActivityResult requestCode, как показано ниже:

originalRequestCode = changedRequestCode - (indexOfFragment << 16)
      6             =      196614        -       (3 << 16)
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
6

сделайте его публичным, а затем используйте вstartActivityResult

пример:

public static final int REQUEST_CODE =1;
getActivity().startActivityForresult(intent, REQUEST_CODE);
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

    }
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
706

startActivityForResult() от твоегоFragment, Когда вы делаете это,requestCode измененActivity который владеетFragment.

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

Изменить:

startActivityForResult(intent, 1);

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

getActivity().startActivityForResult(intent, 1);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededstartActivityForResultError: User Rate Limit ExceededonActivityResultError: User Rate Limit Exceededsuper.onActivityResultError: User Rate Limit ExceededonActivityResultError: User Rate Limit ExceededonActivityResultError: User Rate Limit ExceededonActivityResultError: User Rate Limit Exceeded

Похожие вопросы