onActivityResult () не вызывается после запуска финиша в дочернем действии

1

Я пытаюсь передать данные между двумя действиями с помощью startActivityForResult(). Вот мой код:

//Within an onOptionsItemSelected method
//..
intent.setClass(this, FileManager.class);
startActivityForResult(intent, 0);
//..
}

protected void onActivityResult(int requestCode, int resultCode, Intent intent){
    Log.w("result Recieved", "request code: " + requestCode + ", result code: " + resultCode);
    super.onActivityResult(requestCode, resultCode, intent);
    if (requestCode == 0 && resultCode == Activity.RESULT_OK){
        extras = intent.getExtras();
        if(extras != null){
            Log.w("result Recieved", "extras non null\n" + extras.toString());
            root = new File(extras.getString("SelectedDir"));
            fileName = extras.getString("SelectedFile");
            loadFile(root, fileName);
        }
    }
}

В FileManager у меня есть:

//..
Intent i = new Intent();
Bundle bundle = new Bundle();
bundle.putString("selectedFile", file.getName());
bundle.putString("selectedDir", file.getPath());
i.putExtras(bundle);
setResult(RESULT_OK, i);
Log.d("Finishing status:", "Finishing");
finish();
//..

Он не получает результат, пока я не открою действие, с которого FileManager принудительно закрывается. Это приводит к тому, что код запроса и результата равен 0, что указывает на сбой. Класс FileManager работает, отображая список файлов, когда выбрано диалоговое окно предупреждения для подтверждения, а в слушателе для ввода да. Я вызываю метод, описанный выше. Как заставить его вернуть результат после завершения вызова?

EDIT:

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

EDIT2: Я прокомментировал в основном все в классе FileManager и все равно не вернул результат. Таким образом, это должна быть проблема с активностью, которая его запускает.

EDIT3: Там была ошибка в каком-то старом коде, который я забыл удалить, перед выражением case switch я поместил флаг FLAG_ACTIVITY_NEW_TASK в намерение.

  • 0
    Я не вижу ничего плохого в том, что у вас там. Что вы имеете в виду "пока я снова не открою активность?" Предположительно, когда вы закончите FileManager, он сразу же вернется к предыдущему действию? Есть ли у вас какие-либо особые флаги на Действиях в вашем манифесте? Что у вас есть после startActivityForResult ()?
  • 0
    Да, после того, как я позвонил в финиш, он возвращается к родителю. после startActivityForResult () он выходит из оператора switch и запускает return super.onOptionsItemSelected(item); тогда он ничего не будет делать до тех пор, пока не будет вызвана onActivityResult () {или пользователь что-то сделает. Родительский метод не завершен. В манифесте у меня есть только имя и метка, введенные для обеих операций, за исключением того, что родитель не имеет строки заголовка и имеет альбомную ориентацию. Я снова открываю упражнение после завершения вызова, снова выбрав его вариант во всплывающем меню.
Показать ещё 2 комментария
Теги:

1 ответ

0

У меня были ненужные флаги на намерениях. Также мне нужно не забывать удалить старый код, который я использовал для тестирования.

  • 0
    Не могли бы вы добавить, какой ненужный флаг у вас был?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню