Ответ 1
Я нашел ошибку. У меня было ниже строки в manifest.xml для детской активности.
android:launchMode="singleInstance"
после удаления этой строки. он работает как шарм!!!
Спасибо всем за ваш вклад и предложения.
Я пытаюсь отправить данные из дочерней активности в родительский. Но так или иначе, onActivityResult (..) не получает вызов. вот код
Родительская активность
selectedText.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
Intent intent = new Intent(Parents.this,Child.class);
startActivityForResult(intent, 1);
}
return true;
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
if (data.hasExtra("selText")) {
selectedText.setText(data.getExtras().getString(
"selText"));
}
break;
}
}
Активность для детей. Я вижу выбранное значение, заданное в setResult(). Но после завершения дочерней активности он не возвращается к родительской активности.
textListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int myItemInt,
long arg3) {
selectedFromList =(String) (textListView.getItemAtPosition(myItemInt));
Intent data = new Intent();
data.putExtra("selText", selectedFromList);
setResult(RESULT_OK,data);
finish();
}
});
Я нашел ошибку. У меня было ниже строки в manifest.xml для детской активности.
android:launchMode="singleInstance"
после удаления этой строки. он работает как шарм!!!
Спасибо всем за ваш вклад и предложения.
Для тех, кто сталкивается с одной и той же проблемой, симптом не получать onActivityResult
, следующие случаи могут вызвать эту проблему.
startActivityForResult()
правильно, не используйте startActivity()
.onBackPressed
, super.onBackPressed();
должен быть помещен последним методом, а не в первой строке. (мой случай потратить 5 часов).android:launchMode="singleInstance"
в манифесте или эквивалентном аргументе, чтобы создать намерение.noHistory="true"
в манифесте активности вызываемого абонента.setResult()
пропущен.finish()
вызывается для закрытия операции. используйте finishActivity()
, чтобы закрыть активность вызываемого абонента.requestCode
больше нуля. отрицательное значение не работает.Изменение моего манифеста для вызывающей активности от android:launchMode="singleInstance"
до android:launchMode="singleTop"
исправило проблему для меня.
И намерение, которое использовалось для запуска нового Avtivity, не может быть установлено с флагом Intent.FLAG_ACTIVITY_NEW_TASK
, потому что согласно документации разработчика Android:
Этот флаг нельзя использовать, когда вызывающая сторона запрашивает результат от запускаемого действия.
Используйте singleTop вместо singleInstace как launchMode, так как он поддерживает активность в одной и той же задаче.
Не уверен, что это ваш случай, но при запуске дочерней активности убедитесь, что вы используете startActivityForResult(intent)
вместо startActivity();
onPause воздействовал на ActiveResult.
Одним из угловых случаев может быть:
мой случай был другим и глупым: проблема была в onPause, finish
вызова и завершение действия. Убрал это и хорошо работает.
@Override
protected void onPause() {
super.onPause();
finish(); // this line causing the issue removed it.
}
никогда не используйте статическую ссылку в процессе ссылки вашего слушателя кнопки.
Мой случай был немного сложным, и я понял, что по ошибке использовал статическую ссылку, указывающую на первый экземпляр прослушивателя кнопок в подактиве.
На первом этапе это работало, но когда пользователь возвращался из родительского действия, onActivityResult
не вызывался.
Замена статических ссылок была исправлена
Удалите метод OnActivityResult()
в основном классе, он отлично работает...
MainActivity → → > Фрагменты