MapActivity с фрагментом TabHost

Я парень с iOS, пытаюсь перейти на Android, мне нужен кто-то, кто объяснит / поможет мне, что мне делать в этой ситуации. У меня есть приложение с фрагментом tabhost (3 вкладки). На данный момент я просто загружаю 3 разных простых фрагмента, все работает нормально.

Теперь я хочу реализовать MapActivity на первой вкладке. К сожалению, я не могу расширить его до MapActivity. В настоящее время он расширен до Fragment.

Я искал в Интернете, но смог найти идеальное решение.

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

Мой вопрос: могу ли я просто загрузить 2 фрагмента и одно отдельное действие для карты во вкладку фрагмента. Если это возможно, не могли бы вы рассказать мне, как это реализовать?

ПРИМЕЧАНИЕ. Я создал базу фрагментов табуляции приложения на основе этого учебника. .

Миллион благодарностей от меня.


person JHHoang    schedule 31.07.2012    source источник
comment
Здравствуйте, мне все еще нужна помощь в этом. Пожалуйста помоги!   -  person JHHoang    schedule 01.08.2012


Ответы (1)


Я думаю, что одним из решений будет использование этой модифицированной версии библиотеки поддержки, где FragmentActivity расширяет MapActivity вместо Activity:

https://github.com/petedoyle/android-support-v4-googlemaps

Помните, что вам нужно создать объект MapView внутри класса Activity и передать его во фрагмент следующим образом:

public class MyMapActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Exchanger.sMapView = new MapView(this, "your_api_key");

    }

    public static class Exchanger {
        public static MapView sMapView;
    }
}

и Фрагмент будет

public class MapFragment extends Fragment {

    @Override
    public void onCreate(Bundle args) {
        super.onCreate(args);
        setRetainInstance(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup vg, Bundle data) {

        final ViewGroup parent = (ViewGroup) MyMapActivity.Exchanger.sMapView.getParent();
        if (parent != null)
            parent.removeView(MyMapActivity.Exchanger.sMapView);

        return MyMapActivity.Exchanger.mMapView;
    }

}

MyMapActivity — это TabsFragmentActivity в учебнике, на который вы ссылаетесь. Не забудьте использовать модифицированную версию библиотеки поддержки (ссылка для скачивания)

Описанный выше метод устарел. Теперь вы можете использовать MapFragment: http://developer.android.com/google/play-services/maps.html

person rciovati    schedule 01.08.2012
comment
Спасибо, я пытаюсь реализовать это сейчас, у меня есть еще 1 вопрос: нужно ли мне удалять старую библиотеку поддержки? - person JHHoang; 01.08.2012
comment
Можете ли вы объяснить эту строку: Exchanger.sMapView = new MapView(this, getString(R.string.gmap_api_key)); - person JHHoang; 01.08.2012
comment
Вы создаете объект MapView, используя ключ API (я поместил его в файл string.xml ma, но вы можете его жестко закодировать). Чтобы получить ключ API, см. здесь: developers.google.com/maps/documentation/android/mapkey. - person rciovati; 01.08.2012
comment
Как вы сказали, мне не нужно, чтобы макет XML содержал mapView, где я обычно включаю ключ API карты. Я прав? Также я вижу, что вы возвращаете return MyMapActivity.Exchanger.mMapView; что такое mMapView? это sMapView? - person JHHoang; 01.08.2012
comment
Последний вопрос: если я хочу добавить булавки на карту, я делаю это в своем фрагменте карты, верно? - person JHHoang; 01.08.2012
comment
Да, все виды наложений вам нужно добавить в свой фрагмент. - person rciovati; 01.08.2012