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

OnActivityResult метод не называется Android

Я пытаюсь отправить данные из дочерней активности в родительский. Но так или иначе, 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();
            }
        });
4b9b3361

Ответ 1

Я нашел ошибку. У меня было ниже строки в manifest.xml для детской активности.

        android:launchMode="singleInstance"

после удаления этой строки. он работает как шарм!!!

Спасибо всем за ваш вклад и предложения.

Ответ 2

Для тех, кто сталкивается с одной и той же проблемой, симптом не получать onActivityResult, следующие случаи могут вызвать эту проблему.

  • убедитесь, что используете startActivityForResult() правильно, не используйте startActivity().
  • если вы что-то делаете в режиме overrideen onBackPressed, super.onBackPressed(); должен быть помещен последним методом, а не в первой строке. (мой случай потратить 5 часов).
  • удалите android:launchMode="singleInstance" в манифесте или эквивалентном аргументе, чтобы создать намерение.
  • удалите noHistory="true" в манифесте активности вызываемого абонента.
  • Проверить setResult() пропущен.
  • finish() вызывается для закрытия операции. используйте finishActivity(), чтобы закрыть активность вызываемого абонента.
  • используйте requestCode больше нуля. отрицательное значение не работает.

Ответ 3

Изменение моего манифеста для вызывающей активности от android:launchMode="singleInstance" до android:launchMode="singleTop" исправило проблему для меня.

Ответ 4

И намерение, которое использовалось для запуска нового Avtivity, не может быть установлено с флагом Intent.FLAG_ACTIVITY_NEW_TASK, потому что согласно документации разработчика Android:

Этот флаг нельзя использовать, когда вызывающая сторона запрашивает результат от запускаемого действия.

Ответ 5

Используйте singleTop вместо singleInstace как launchMode, так как он поддерживает активность в одной и той же задаче.

Ответ 6

Не уверен, что это ваш случай, но при запуске дочерней активности убедитесь, что вы используете startActivityForResult(intent) вместо startActivity();

Ответ 7

onPause воздействовал на ActiveResult.

Одним из угловых случаев может быть:
мой случай был другим и глупым: проблема была в onPause, finish вызова и завершение действия. Убрал это и хорошо работает.

@Override
protected void onPause() {
    super.onPause();
    finish(); // this line causing the issue removed it. 
}

Ответ 8

никогда не используйте статическую ссылку в процессе ссылки вашего слушателя кнопки.

Ответ 9

Мой случай был немного сложным, и я понял, что по ошибке использовал статическую ссылку, указывающую на первый экземпляр прослушивателя кнопок в подактиве.

На первом этапе это работало, но когда пользователь возвращался из родительского действия, onActivityResult не вызывался.

Замена статических ссылок была исправлена

Ответ 10

Удалите метод OnActivityResult() в основном классе, он отлично работает... MainActivity → → > Фрагменты