Это одна из самых популярных проблем. Мы можем найти много сообщений об этой проблеме. Но ни один из них не полезен для меня.
Итак, я решил эту проблему с помощью этого решения.
Давайте сначала поймем, почему это происходит.
Мы можем называть startActivityForResult
непосредственно из
После того, как вы назовете startActivityForResult
из фрагмента, requestCode будет изменен, чтобы привязать идентификатор Fragment к коду. Это позволит Activity отслеживать, кто отправляет этот запрос после получения результата.
После того, как активность была перенесена обратно, результат будет отправлен в Activity onActivityResult с измененным кодом запроса, который будет декодирован в оригинале Идентификатор requestCode + Fragment. После этого Activity отправит результат активности на этот фрагмент через onActivityResult.
Проблема заключается в следующем:
Активность может отправить результат только фрагменту, который был прикреплен непосредственно к Activity, но не к вложенному. Это причина, по которой onActivityResult вложенного фрагмента никогда не вызывался независимо от того, что.
Решение:
1) Запустите Intent в вашем фрагменте по нижнему коду:
/** Pass your fragment reference **/
frag.startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE = 12345
2) Теперь в вашем переопределении родительской активности ** onActivityResult()
: **
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
Вы должны вызвать это в родительской активности, чтобы заставить его работать.
3 ) В вызове фрагмента:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
}
}
Вот и все. С помощью этого решения он может применяться для любого отдельного фрагмента, независимо от того, является он вложенным или нет. И да, это также охватывает весь случай! Кроме того, коды также приятны и чисты.
Control.net круиза (ccnet) делает все, что Вы ищете. Ее довольно простое в использовании, просто удостоверьтесь, собираетесь ли Вы выполнить его как услуга, Вы делаете ему отчет и не заставляете его работать как сетевая служба, тот путь можно дать ему права на полях интранет и иметь его, действительно копируют с помощью xcopy, развертывается.
Это имеет все виды почтовых режимов, при отказе, при всех, на фиксации после отказа и еще много.
Гудзон является самой легкой непрерывной интеграцией / инструмент сборки ежедневной газеты, который я видел. Не уверенный, если это отвечает всем Вашим требованиям.
Смотрите на JetBrain (парни позади ReSharper) TeamCity
Я использую CC.Net наряду с SubVersion и MSBuild для выполнения этого. Вот замечательный гид для реализации этого, которое я последовал найденный очень полезным.
В моем последнем работодателе я настроил buildserver с cc.net. Ожидайте, что работа по крайней мере одного или двух дней настроит его. Я использовал cc.net вместе с nant и msbuild. Эти проекты имеют много перекрытия в функциональности, таким образом, это могла бы быть хорошая идея думать о том, как Вы хотите настроить все.
Установкой, с которой я в конечном счете обосновался, был cc.net на сервере, чтобы получить проект от подверсии и исчерпать nant сценарии. nant использовался для вызова msbuild, чтобы создать Visual Studio .sln файлы и сделать все другие шаги сборки как запущение тестов и т.д.
У меня был беглый взгляд на teamcity также. На первом взгляде это выглядит намного лучше, чем cc.net, но у меня не было времени для испытания его все же. Это, конечно, стоит проверить.
Я использовал cc.net с nant и msbuild с большим успехом, настоятельно рекомендовал бы его.
Несколько лакомых кусочков о работе с cc.net и msbuild. При создании C/C + =, проекты, msbuild, гм, ненадежен, по крайней мере, с VS 2005 (и возможно ранее). Я не протестировал с VS 2008. Мы нашли, что иногда msbuild будет работать правильно, иногда нет. В попытке решить проблему, мы нашли vcbuild.exe, который, кажется, работает хорошо вместо msbuild при создании решений C/C++.