Ответ 1
onActivityResult вызывается, но использует неправильную ссылку для получения данных из результата:
getIntent().getStringExtra("teamName")
Замените это:
data.getStringExtra("teamName")
Здесь данные являются целью результата.
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);
onActivityResult вызывается, но использует неправильную ссылку для получения данных из результата:
getIntent().getStringExtra("teamName")
Замените это:
data.getStringExtra("teamName")
Здесь данные являются целью результата.
Если вы вызываете startActivityForResult()
из Fragment
, тогда вы должны вызвать startActivityForResult()
, а не getActivity().startActivityForResult()
, так как это приведет к Fragment
onActivityResult()
.
Если вы не знаете, где вы звоните в startActivityForResult()
и как вы будете вызывать методы.
Так как Activity
получает результат onActivityResult()
, вам необходимо переопределить Activity
onActivityResult()
и вызвать super.onActivityResult()
для распространения на соответствующий Fragment
для необработанных кодов результатов или для всех.
Если выше 2 варианта не работают, обратитесь к опции 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
}
Я решил свою проблему, удалив android:noHistory="true"
из AndroidManifest.xml
.
У меня была такая же проблема. Мое призвание было "singleInstance". Удаление, которое решило мою проблему.
У меня была одна и та же проблема, и я удивлен, что ни одно из решений, о которых я смотрел, не упомянул следующее:
Значение константы RESULT_OK равно -1, и если вы укажете значение 1 в методе setResult, тогда код результата не будет равен RESULT_OK, и условие не будет обработано. Надеюсь, кто-то найдет это полезным.
У меня была такая же проблема, и я решил, что добавив эти параметры в действие:
AlwaysRetainTaskState = true, LaunchMode = Android.Content.PM.LaunchMode.SingleTop
После ссылки ответ @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);
У меня была аналогичная проблема, и мой вопрос был о requestCode
параметра, который был установлен в -1 в startActivityForResult
методе. Так что, когда я изменил requestCode
значение 1 или 0 onActivityResult
начали вызывались.
Удалил эту строку и все работает нормально.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Спасибо за подсказку.
После просмотра pradip tilala answer я решил свою проблему, удалив строку ниже из AndroidManifest.xml
android:noHistory="true"