2013-05-18 5 views
0

Je souhaite afficher la boîte de dialogue et mettre l'activité en pause. Pour attendre l'utilisateur, allumez le GPS. Après cela, il peut interroger la base de données pour remplir la liste.Activité de pause de la boîte de dialogue Android

L'image ci-dessous la description de ce que je veux faire

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

Et ceci est mon code

public class RestaurantListFragment extends ListFragment { 

private ArrayList<Restaurant> restaurants; 
private SQLDataHelper dataHelper; 

GPSTracker gpsTracker; 



public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.restaurant_list, null); 

} 

public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    gpsTracker = new GPSTracker(getActivity()); 

    if(!gpsTracker.canGetLocation) 
    { 
     showSettingsGPSAlert(); 
    } 

    dataHelper = new SQLDataHelper(getActivity(), "restaurantDB"); 

    restaurants = new ArrayList<Restaurant>(); 
    dataHelper.openDB(); 
    Cursor cursor = dataHelper.query("Restaurant", new String[]{"Id", "ResName", "Logo", "Address", "Latitude", "Longitude"}, null 
      , null, null, null, null); 
    if (cursor.moveToFirst()) { 
     do { 
      Restaurant restaurant = new Restaurant(); 
      restaurant.setId(cursor.getInt(0)); 
      restaurant.setResName(cursor.getString(1)); 
      restaurant.setLogo(cursor.getString(2)); 
      restaurant.setAddress(cursor.getString(3)); 
      restaurants.add(restaurant); 
     } while (cursor.moveToNext()); 
    } 
    //Collections.sort(restaurants); 
    RestaurantAdapter restaurantAdapter = new RestaurantAdapter(getActivity(), restaurants); 
    setListAdapter(restaurantAdapter); 
} 

public void showSettingsGPSAlert() { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); 

    // Setting Dialog Title 
    alertDialog.setTitle("GPS is settings"); 

    // Setting Dialog Message 
    alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); 

    // On pressing Settings button 
    alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      startActivity(intent); 

     } 
    }); 

    // on pressing cancel button 
    alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
     } 
    }); 

    // Showing Alert Message 
    alertDialog.show(); 
} 

}

Mes problèmes est ce n'est pas attendre son tour utilisateur sur le GPS. Il affiche la liste avec la concurrence de la boîte de dialogue. J'ai chercher beaucoup de solution. Mais ça ne marche pas. S'il vous plaît aider!

+0

Voulez-vous dire que vous voulez attendre que l'utilisateur active le GPS? Si vous êtes plus précis, je pourrais peut-être vous aider. – Milan

+0

oui, c'est excatly je veux –

+0

Désolé de répondre très tard mais, vous devez définir setCancelable (false) à votre boîte de dialogue. Ajoutez un BroadcastReceiver qui écoute si le GPS est activé. (Il devrait y en avoir un pour cela) Et chaque fois que votre BroadcastReceiver reçoit que le GPS est allumé, annulez votre boîte de dialogue et continuez. Ou bloquez toute autre opération jusqu'à ce que vous receviez true de LocationManager.isProviderEnabled (LocationManager.GPS_PROVIDER); – Milan

Répondre

0

Problème est dû au fait que vous vérifiez le GPS, mais vous avez placé le code ci-dessous seulement pour mettre à jour la liste. Vous pouvez essayer cette approche .Utilisez Location Listener qui a ignoré les méthodes onProviderDisabled et onProviderEnabled. Après avoir ouvert la page Paramètres si vous vérifiez les paramètres GPS, onProviderEnabled sera appelé. Donc, mettre à jour votre listview dans cette méthode

Edit:

LocationManager lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     MyLocationListener locationListener = new MyLocationListener(); 

Après l'appel requestLocationUpdates:

lm.requestLocationUpdates(
        LocationManager.GPS_PROVIDER, 
        0,   // ms since last call 
        0,    // m movement 
        locationListener); 

maintenant définir LcationListener:

class MyLocationListener implements LocationListener 
    { 

      public void onLocationChanged(Location loc) 
      { 

      } 

       public void onProviderDisabled(String provider) 
       { 

       } 

       public void onProviderEnabled(String provider) { 
        Log.d("Hello7","onProviderEnabled"); 
         //Update your listview here 


       } 
       public void onStatusChanged(String provider, int status, Bundle extras)        { 
        Log.d("Hello10","onProviderEnabled"); 
       } 
    } 

vous pouvez arrêter locationUpdates aussi par lm.removeUpdates(locationListener);

+0

Oui, pouvez-vous expliquer plus de détails. Ou ajoutez du code à votre réponse. Merci –

+0

Voir ma réponse éditée – Abhi

+0

Mais, si vérifiez comme vous l'avez dit. Il n'attendra pas jusqu'à ce que l'utilisateur allume GPS puis interroge la base de données pour remplir la liste. Il peut passer le code ci-dessous. Je peux vérifier le GPS en appelant if (! GpsTracker.canGetGPS()) { showSettingsGPSAlert(); } –

Questions connexes