Я пытаюсь передать данные между двумя действиями с помощью 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 в намерение.
У меня были ненужные флаги на намерениях. Также мне нужно не забывать удалить старый код, который я использовал для тестирования.
return super.onOptionsItemSelected(item);
тогда он ничего не будет делать до тех пор, пока не будет вызвана onActivityResult () {или пользователь что-то сделает. Родительский метод не завершен. В манифесте у меня есть только имя и метка, введенные для обеих операций, за исключением того, что родитель не имеет строки заголовка и имеет альбомную ориентацию. Я снова открываю упражнение после завершения вызова, снова выбрав его вариант во всплывающем меню.