0

Миграция из MapActivity со статическим SupportMapFragment в макете для чистых динамических фрагментов.SupportMapFragment, вложенный в SupportFragment getMap() возвращает NULL

Приведенный ниже код является родительским фрагментом. Он содержит представление содержимого, которое я хочу содержать динамически созданный SupportMapFragment. Содержимое представляет собой LinearLayout с id: map_container.

public class MapFragment extends android.support.v4.app.Fragment { 

    private final LatLng NotHamburg = new LatLng(41.8236, -71.4222); 
    protected GoogleMap _MAP; 
    CustomMapFragment mapFragment; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_map, container, false); 
     mapFragment = new CustomMapFragment(); 
     FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
     transaction.add(R.id.map_container, mapFragment).commit(); 

     newMarker(); 
     return rootView; 
    } 


    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

    } 


     //oh, user wants to see a new marker or remove some from inside the main fragment? Lets try... 
    public void newMarker(){ 
     _MAP = mapFragment.getMap(); 
     _MAP.addMarker(new MarkerOptions().position(NotHamburg).title("NOTHamburg")); 
    } 
} 

Код ниже мой заказ MapFragment

public class CustomMapFragment extends com.google.android.gms.maps.SupportMapFragment { 


private final LatLng HAMBURG = new LatLng(40.8236, -71.4222); 
private GoogleMap googleMap; 

public static CustomMapFragment newInstance() { 
    CustomMapFragment fragment = new CustomMapFragment(); 
    return fragment; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    googleMap = getMap(); 
    if (googleMap != null) { 

     googleMap.addMarker(new MarkerOptions().position(HAMBURG).title("Hamburg")); 
     googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15)); 
     googleMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null); 
    } 
} 

Примерно линии 17 из моего фрагмента, который содержит карту, я получаю нулевой указатель. поскольку код работает в методе onactivitycreated() моего фактического MapFragment, карта не должна быть готова по строке 17 в методе onviewcreated.

+1

Попробуйте поместить метод в MapFragment, который делает маркер, и вызовите этот метод из родительского фрагмента. –

+0

не помогло. Спасибо в любом случае –

+1

Вы когда-нибудь слышали о методе getMapAsync()? –

ответ

0

Решение заключалось в том, чтобы связать что-либо с родительским фрагментом в обработчике с небольшой задержкой.

Заинтересованы в том, чтобы узнать больше о жизненном цикле и где хорошее место для запуска основных петель и слушателей фрагментами. Думаю, мне просто нужно быть более осторожным в отношении потока пользовательского интерфейса и тому подобного.

+0

Есть лучшие решения, один из них - использовать новейший API Google Play Service с лучшим дизайном. –

+0

. Я создал репо для нескольких сценариев: https://github.com/eneim/Google_Map_Practice. Посмотрите, дает ли он вам лучший путь. –

+0

Спасибо. Я пойду посмотрю. Я уже решил проблему, но сейчас я смотрю ваш проект. –

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

  • Нет связанных вопросов^_^