2012-07-11 8 views
0

Je sais qu'il y a des milliers de questions comme celle-ci. Mais je ne peux pas trouver une explication à la mienne. J'utilise la méthode onLocationChanged pour mettre à jour l'emplacement de l'utilisateur sur mapView. Tout va bien; J'affiche un ProgressDialog dans la méthode onCreate et le rejette à la fin de OnlocationChanged et cela fonctionne.Afficher la boîte de dialogue de progression dans OnLocationChanged

Le problème est lorsque je crée et affiche une boîte de dialogue de progression dans la méthode onLocationChanged. D'une manière ou d'une autre cela ne fonctionne pas. Je pense que c'est parce que la méthode fonctionne sur un thread différent. Mais ma question est, si la méthode onLocationChanged s'exécute sur un thread différent, pourquoi est-ce que cela me permet de fermer la boîte de dialogue sans en créer une nouvelle?

est ici une partie de ma classe:

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tiendas); 
    mapView = (MapView) findViewById(R.id.mapview); 
    mapView.setBuiltInZoomControls(true); 
    mapView.setSatellite(false); 

    ProgressDialog dialog = ProgressDialog.show(StoresActivity.this, "", 
    "Getting your location", true, true); 


public void onLocationChanged(Location location) { 
      // TODO Auto-generated method stub 

      /////if i show or initialize the dialog here, doesn't work! 

      updateMap(location) // this function calls asynctask 
               // for an HTTPrequest 
    dialog.dismiss(); 


     } 

}

qui fonctionne de code et renvoie la boîte de dialogue correctement, mais si je déclare ou montrer la boîte de dialogue à l'intérieur de la méthode OnLocationChanged, il affiche jamais. N'importe qui? Pourquoi le rejette-t-il mais ne peut pas le montrer?

+0

pouvez-vous envoyer votre code –

+0

y est, merci! –

Répondre

0

Passez le Context de LocationListener classe dans ProgressDialog.

+0

Comment pouvez-vous faire cela? Il y a mon code. Des idées? –

+0

OK. Pass StoresActivity.this contexte dans AsyncTask. –

-1

Vérifiez ce code de son amende de travail pour moi

LocationFinderActivity public class étend l'activité met en œuvre LocationListener {

LocationManager locationManager = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_location_finder); 

    Log.i("inside","oncreate"); 
    locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0,this); 


} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_location_finder, menu); 
    return true; 
} 

@Override 
public void onLocationChanged(Location location) { 

    Log.i("inside","onlocationchange"); 
    ProgressDialog dialog = ProgressDialog.show(LocationFinderActivity.this, "", 
      "Getting your location", true, true); 
} 

@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 

}

Questions connexes