2017-02-01 4 views
0

Я добавил MapFragment к FrameLayout в OnCreate из деятельности какSupportMapFragment не может быть добавлен в FrameLayout

getSupportFragmentManager().beginTransaction() 
       .replace(R.id.frame_container,//where frame_container is a FrameLayout 
       new MapyFragment(), 
       MapyFragment.class.getSimpleName()).commit(); 

и frame_container является FrameLayout

MapyFragment.class

public class MapyFragment extends Fragment { 

    private SupportMapFragment supportMapFragment; 
    private GoogleMap map; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     setRetainInstance(true); 
     setHasOptionsMenu(true); 

     super.onCreate(savedInstanceState); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_mapy, container, false); 
    } 

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

     FragmentManager fm = getChildFragmentManager();/// getActivity().getSupportFragmentManager();/// getChildFragmentManager(); 
     supportMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container); 
     if (supportMapFragment == null) { 
      supportMapFragment = SupportMapFragment.newInstance(); 
      fm.beginTransaction().replace(R.id.map_container, supportMapFragment).commit(); 
     } 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     if (supportMapFragment != null) { 
      supportMapFragment.getMapAsync(new OnMapReadyCallback() { 

       @Override 
       public void onMapReady(GoogleMap googleMap) { 
        map = googleMap; 
        map.animateCamera(CameraUpdateFactory.zoomTo(15)); 
       } 
      }); 
     } 
    } 
} 

Я попытался изменить с помощью getChildFragmentManager и getActivity.getSupportFragmentManager().

Карта Google не отображается. Нет крушения, Что я делаю неправильно. уточните пожалуйста и

И почему мы должны использовать функцию фрагментации, чтобы получить наш map_container. См

fm.findFragmentById(R.id.map_container); 

fragment_mapy.xml

<fragment 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:map="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/map_container" 
     class="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="40dp" 
     map:uiZoomControls="true" /> 

ответ

0

попробовать это:

инициализации supportMapFragment в onCreateview.

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

    super.onCreateView(inflater, container, savedInstanceState); 
    View rootView = inflater.inflate(R.layout.activity_map, container, false); 
    smp = (SupportMapFragment) this.getChildFragmentManager().findFragmentById(R.id.map); 
    smp.getMapAsync(this); 
    retrun rootView; 
} 

@Override 
public void onMapReady(GoogleMap map) { 
    mMap = map; 
} 

в макет XML:

<fragment 
    android:id="@+id/map" 
    android:name="com.google.android.gms.maps.SupportMapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

Также читайте о SupportMapFragment здесь

+0

rafsanahmand007 Я ценю ваши усилия. – Nepster

0

решение для моей проблемы

Прежде всего нет никакой разницы ч/бandroid:name & android:class обе работа хорошо. See this

getChildFragmentManager() является виновником.

Последний рабочий класс

public class MapyFragment extends Fragment implements OnMapReadyCallback { 

    private SupportMapFragment supportMapFragment; 
    private GoogleMap map; 

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

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_mapy,container,false); 
    } 

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

     FragmentManager fm = getActivity().getSupportFragmentManager();/// getChildFragmentManager(); 
     supportMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container); 
     if (supportMapFragment == null) { 
      supportMapFragment = SupportMapFragment.newInstance(); 
      fm.beginTransaction().replace(R.id.map_container, supportMapFragment).commit(); 
     } 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     map = googleMap; 
     map.animateCamera(CameraUpdateFactory.zoomTo(15)); 
    } 
}