2012-12-26 12 views
11

Ich habe ein paar Fragen zu diesem Thema hier gefunden, aber ihre Antworten scheinen nicht zu gelten, dass mein Projekt die Bibliothek referenziert, die die Klasse enthält. Hier ist mein Code ist:Google Maps api v2 - Der Typ android.app.Fragment kann nicht aufgelöst werden. Es wird indirekt von erforderlichen .class-Dateien referenziert

package com.demo.app; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 

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.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class Mapview extends FragmentActivity { 

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

     GPSTracker gps = new GPSTracker(Mapview.this); 

     // check if GPS enabled  
     if(gps.canGetLocation()){ 

      double latitude = gps.getLatitude(); 
      double longitude = gps.getLongitude(); 

      // \n is for new line 
      // Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); 
     }else{ 
      // can't get location 
      // GPS or Network is not enabled 
      // Ask user to enable GPS/network in settings 
      gps.showSettingsAlert(); 
     } 

     double latitude = gps.getLatitude(); 
     double longitude = gps.getLongitude(); 


     SupportMapFragment fragment = new SupportMapFragment(); 
     getSupportFragmentManager().beginTransaction() 
       .add(android.R.id.content, fragment).commit(); 

     GoogleMap mMap; 
     mMap = ((MapFragment) getSupportFragmentManager().findFragmentById(android.R.id.content)).getMap(); 
     mMap.addMarker(new MarkerOptions() 
       .position(new LatLng(0, 0)) 
       .title("Hello world")); 


    } 
} 

So können Sie sehen, dass ich die Fragment-Bibliothek verwiesen in den Importen, wirft Eklipse keine Fehler, so dass es zu bestätigen scheint, dass es existiert. Im Bild unten sehen Sie, dass mein Eclipse-Projekt dort referenzierte Bibliotheken zeigt. Darin können Sie die FragmentManager-Klasse mit findFragmentById() verfügbar sehen. Ich fand auch die anderen Klassen, auf die ich referenziere, in ähnlicher Weise. So zum Schluss habe ich die Bibliotheken in einem lib-Ordner, und sie werden von Eclipse anerkannt und werfen keine Fehler im Code, aber das Paket wird nicht aufgrund von Fehlern exportieren und der einzige Fehler ist in Zeile eins dieses Codes neben dem " p "im Paket, das besagt: 'Der Typ android.app.Fragment kann nicht aufgelöst werden.

referenced libraries

Irgendwelche Ideen Es wird indirekt von erforderlichen .class-Dateien verwiesen wird?

Ich habe versucht, ein paar Mal aufzuräumen und wieder aufzubauen.

Antwort

27

Versuchen

mMap = ((MapFragment) getSupportFragmentManager().findFragmentById(android.R.id.content)).getMap(); 

zu

mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(android.R.id.content)).getMap(); 

Ändern Sie müssen eine Pre ICS-Version von Android laufen und Sie in "MapFragment" ziehen, die die nutzt integrierte Version von Fragmenten und nicht die Version der Support-Bibliothek.

+0

Das hat es getan. Immer die kleinen Dinge. –

3

Stellen Sie sicher, dass Ihr Ziel-SDK 3.0 oder höher ist.

Klicken Sie in Eclipse auf das Menü Projekt, klicken Sie auf Eigenschaften, klicken Sie links auf Android und wählen Sie ein Ziel-SDK mit 3.0 oder höher.