2016-09-12 4 views
1

Я создаю приложение для Android, которое составляет один из его экранов, используя набор элементов, каждый из которых является дочерним элементом класса ScreenElement, который снова расширяет LinearLayout.Добавить Google Map как дочерний элемент LinearLayout

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

LinearLayout layout = (LinearLayout) findViewById(R.id.screenLayout); 
for(ScreenElement e : screenElements) { 
    layout.addView(e); 
} 

Элемент может содержать все виды вещей, например, изображения или текста. Теперь я хочу иметь элемент, который может отображать карту. Проблема в том, что Google рекомендует отображать карту в Fragment, что невозможно (потому что класс удержания - это View, а не Activity или Fragment. Также есть MapView, который я мог бы использовать, но все примеры, которые я нашел (например, this или this) использует MapView внутри Activity, потому что MapView требуется для подключения к переопределенным функциям (, onDestroy, ...) из Activity.

Так что я в основном в надежде найти что-то, что делает это (не рабочий код):

public class MapElement extends ScreenElement { 
    private MapView mapView; 
    private GoogleMap gMap; 

    public MapElement(Context con) { 
     super(con); 

     mapView = new MapView(con); 
     gmap = new GoogleMap(); 

     // Set map options and features, size etc. 

     mapView.setMap(gMap); 
     this.addView(mapView); 
    } 
} 

Ну, за исключением того, что это не работает. Я был бы благодарен за каждый намек, который вы могли бы мне дать!

+0

Это Google Maps API демо есть раздел «Programatically добавить карту», ​​которая может быть полезна для вас. https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/src/main/java/com/example/mapdemo/ProgrammaticDemoActivity.java – Dportology

+0

Да, я пробовал это, но проблема в том, что 'getSupportFragmentManager() 'может вызываться только в том случае, если' Activity' расширяет 'FragmentActivitiy'. Это не так, потому что я работаю в классе non-Activity. В вашем примере говорится, что «MapFragment» не может быть создан программно, поэтому я не могу использовать здесь «MapFragment». – s4inz

ответ

1

Вы близко к своему неработающему коду. Вы должны иметь доступ к функциям fragmentManager, если вы передали контекст, который вы передали, чтобы ввести Activity.

((MainActivity)con).getSupportFragmentManager().... 

, а затем вы можете следовать учебник ранее связанный

+0

Большое спасибо. Это было довольно легко. Не знал, что 'supportManager' может быть вызван из контекста. – s4inz

Смежные вопросы