2016-11-14 8 views
0

Im Entwickeln einer App, die eine Karte auf einem Fragment anzeigt. Alles ist eingerichtet, aber es gibt kleine Dinge, die mich nicht fertig machen lassen.MapFragment auf einem Fragment

gMapFragment.java:

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 


public class gMapFragment extends Fragment implements OnMapReadyCallback { 


    public gMapFragment() { 
     // Required empty public constructor 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_map, container, false); 
    } 

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

     MapFragment fragment = (MapFragment) getChildFragmentManager().findFragmentById(R.id.map); 
     fragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 

     LatLng marker = new LatLng(46.33328, 15.38173); 
     googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker,13)); 
     googleMap.addMarker(new MarkerOptions().title(("HERE WE ARE!")).position(marker)); 

    } 
} 

Ich nenne dieses Fragment aus Schaltfläche in einem anderen frament und dies ist die Methode, die es nennt:

public void onClick(View view) { 
    Fragment fragment = null; 
    switch (view.getId()) { 
     case R.id.SearchButton: 
      fragment = new gMapFragment(); 
      replaceFragment(fragment); 
      break; 
    } 
} 

public void replaceFragment(Fragment someFragment) { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.fragment_container, someFragment); 
    transaction.addToBackStack(null); 
    transaction.commit(); 
} 

ich Fehler "gMapFragment nicht sein kann in Fragment konvertiert "Irgendeine Idee, wie Sie das beheben können? Vielen Dank!

+0

der zweite Codeblock innerhalb a Fragment? Besser, den FragmentTransaction-Code in die Aktivität zu setzen. –

+0

Ja, ist in einem Fragment. Ich kann nicht aktiv werden .... – Capie

+0

Ja, Sie können einfach eine öffentliche Methode in der Aktivität definieren, die eine FragmentTransaction durchführt, um das aktuelle Fragment durch das Google Map Fragment zu ersetzen, und diese Methode von Ihrer onClicke() Methode in der aufrufen Fragment. –

Antwort

0

Stellen Sie zuerst sicher, dass Sie mit Ihren Fragment-Importen konsistent sind. Verwenden Sie entweder import android.app.Fragment in allen Klassen oder import android.support.v4.app.Fragment; in allen Klassen. Nicht mischen und übereinstimmen.

Dann fügen Sie diese auf die Aktivität:

public void openMapFragment() { 
    Fragment fragment = new gMapFragment(); 
    replaceFragment(fragment); 
} 

//moved to Activity from the Fragment 
public void replaceFragment(Fragment someFragment) { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.fragment_container, someFragment); 
    transaction.addToBackStack(null); 
    transaction.commit(); 
} 

Dann wird in dem Fragment onClick() Methode, rufen Sie einfach in die Aktivität der FragmentTransaction zu tun:

public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.SearchButton: 
      MainActivity activity = (MainActivity) getActivity(); 
      if (activity != null) { 
       activity.openMapFragment(); 
      } 
      break; 
    } 
} 
+0

Danke Kumpel, es funktioniert. Aber ich musste sicherstellen, dass ich 'android.support.v4.app.Fragment' anstelle des anderen habe, sonst würde es nicht funktionieren – Capie

Verwandte Themen