Подтвердить что ты не робот

OnActivityResult() не вызывается

onActivityResult() не вызывается. Ниже мой код:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to

    Log.e("CALLED", "OnActivity Result");

    if (requestCode == TEAM_SELECTED_REQUEST_CODE) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            try {
                 mySelectedTeam = getIntent().getStringExtra("teamName");
                txtSelectTeamCreateMatch.setText(mySelectedTeam);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Здесь я начинаю SelectTeamActivity:

Intent intent=new Intent(CreateMatch.this,SelectTeamActivity.class);
startActivityForResult(intent, TEAM_SELECTED_REQUEST_CODE);
//overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);

Intent intent = getIntent();
intent.putExtra("teamID", teamDataList.get(position).getTeamId().toString());
intent.putExtra("teamName", teamDataList.get(position).getTeamName().toString());
setResult(1, intent);
4b9b3361

Ответ 1

onActivityResult вызывается, но использует неправильную ссылку для получения данных из результата:

getIntent().getStringExtra("teamName")

Замените это:

data.getStringExtra("teamName")

Здесь данные являются целью результата.

Ответ 2

Вариант 1:

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

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

Вариант 2:

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

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

Вариант 3:

Явный вызов функции Fragment в 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);
}

В классе child:

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

Ответ 3

Я решил свою проблему, удалив android:noHistory="true" из AndroidManifest.xml.

Ответ 4

У меня была такая же проблема. Мое призвание было "singleInstance". Удаление, которое решило мою проблему.

Ответ 5

У меня была одна и та же проблема, и я удивлен, что ни одно из решений, о которых я смотрел, не упомянул следующее:

Значение константы RESULT_OK равно -1, и если вы укажете значение 1 в методе setResult, тогда код результата не будет равен RESULT_OK, и условие не будет обработано. Надеюсь, кто-то найдет это полезным.

Ответ 6

У меня была такая же проблема, и я решил, что добавив эти параметры в действие:

AlwaysRetainTaskState = true, LaunchMode = Android.Content.PM.LaunchMode.SingleTop

Ответ 7

После ссылки ответ @spgodara.

У меня ниже AndroidManifest.xml для моего класса SecondActivity:

<activity android:name=".SecondActivity"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@style/AppThemeHome"
        android:windowSoftInputMode="adjustResize"/>

Я поместил простой Toast чтобы найти, когда onActivityResult обратный вызов onActivityResult из MainActivity. Я обнаружил, что просто вызывается при создании SecondActivity (при открытии SecondActivity). Он отлично работает на устройстве Redmi Note 3 с Marshmallow, но не работает на устройстве Kitkat.

После удаления ниже строки замедления AndroidManifest.xml, упомянутой выше:

android:launchMode="singleTask"

и намерение вызова, как показано ниже, работает для меня:

 Intent intent = new Intent(this, SecondActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivityForResult(intent, SECOND_ACTIVITY_REQUEST_CODE);

Ответ 8

У меня была аналогичная проблема, и мой вопрос был о requestCode параметра, который был установлен в -1 в startActivityForResult методе. Так что, когда я изменил requestCode значение 1 или 0 onActivityResult начали вызывались.

Ответ 9

Удалил эту строку и все работает нормально.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Спасибо за подсказку.

Ответ 10

После просмотра pradip tilala answer я решил свою проблему, удалив строку ниже из AndroidManifest.xml

android:noHistory="true"