Если вы когда-нибудь использовали карты в приложении, то наверно знаете, что виджет MapView может быть использован только в activity унаследованной от MapActivity. Я никогда не понимал почему так сделано, и посмотрев реализацию MapActivity так и не понял, ну зачем было нужно это странное правило, ведь все что было в MapActivity очень просто реализовывалось в обычной Activity.
С появлением Android 3.0 и ее классной фичи Fragments все усложнилось в разы, для использования Fragment'ов (поверьте мне, узнав что это такое вы точно захотите их использовать, если конечно вы уже не использользуете их) нужно наследоваться от класса FragmentActivity, а в Java как вы знаете нет множественного наследования, и как теперь быть, если нужно использовать фрагменты с картами?
Первое решение было создано Jake Wharton, он предложил пересобрать библиотеку android-support с условием что унаследовать FragmentActivity от MapActivity. Это был просто огромный костыль, который не понравился никому, но вариантов не было. С выходом каждой новой версии android-support пришлось пересобирать ее по новой, что не очень удобно.
Со временем придумали второе решение, которое заключалось в том, чтобы с помощью класса LocalActivityManager, заключить содержимое activity c картами в любой фрагмент в качестве его содержимого. Вот ссылка на решение, которое я немного переделал взяв тут.
Все что вам нужно сделать это наследовать от ActivityHostFragment и реализовать метод getActivityClass, в котором нужно вернуть ваш активити с картами и все, можете использовать этот фрагмент там, где вам нужен был фрагмент с картами.
Но и это не самое лучшее решение, потому что LocalActivityManager объявлен Google'ом deprecated. Поэтому пока остается только ждать, хотя сами гугловцы продвигают именно это решение. Вот Issue на гуглкод. Надеюсь в новой версии android-support, эту проблему исправят.
Со временем придумали второе решение, которое заключалось в том, чтобы с помощью класса LocalActivityManager, заключить содержимое activity c картами в любой фрагмент в качестве его содержимого. Вот ссылка на решение, которое я немного переделал взяв тут.
Все что вам нужно сделать это наследовать от ActivityHostFragment и реализовать метод getActivityClass, в котором нужно вернуть ваш активити с картами и все, можете использовать этот фрагмент там, где вам нужен был фрагмент с картами.
Но и это не самое лучшее решение, потому что LocalActivityManager объявлен Google'ом deprecated. Поэтому пока остается только ждать, хотя сами гугловцы продвигают именно это решение. Вот Issue на гуглкод. Надеюсь в новой версии android-support, эту проблему исправят.
Комментариев нет:
Отправить комментарий