2013-10-08 35 views
0

我似乎無法獲取我當前的位置。在這個對話框的後半部分,我調用一個名爲MyLocation的類。我以前從來沒有遇到過這樣的麻煩。現在我嘗試了幾種不同的方法無濟於事。但我相信我的麻煩是與上下文相關的。無法在對話框中調用片段中的類

這是第一次在片段的AlertDialog中使用它。我認爲這條線給我帶來麻煩。

myLocation.getLocation(context, locationResult); 

我在公共查看onCreateView定義背景

context = getActivity().getApplicationContext(); 

警報正在按預期只是公共無效gotLocation似乎並不被獲取調用。

public void showLocationDialog() { 
    new AlertDialog.Builder(this.getActivity()).setItems(C, 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialoginterface, int i) { 
        if (i == 0) { 

         LayoutInflater inflater = LayoutInflater 
           .from(getActivity()); 
         final View textenter = inflater.inflate(
           R.layout.dialog_location, null); 
         final EditText userinput = (EditText) textenter 
           .findViewById(R.id.etLocation); 
         final AlertDialog.Builder builder = new AlertDialog.Builder(
           getActivity()); 
         builder.setView(textenter).setTitle(
           "Enter Location or where abouts"); 
         builder.setPositiveButton("Set", 
           new DialogInterface.OnClickListener() { 
            @Override 
            public void onClick(
              DialogInterface dialog, int id) { 
             if (userinput != null){ 
              tvLocation.setText(userinput.getText().toString()); 
              dialog.cancel(); 
             } else { 
              dialog.cancel(); 
              showLocationDialog(); 
              Log.e("NULL", "Dismiss"); 
             }       
            } 
           }).setNegativeButton("Cancel", 
           new DialogInterface.OnClickListener() { 
            public void onClick(
              DialogInterface dialog, int id) { 
             dialog.cancel(); 
            } 
           }); 
         builder.show();    
        } else if (i == 1) {     
         LocationResult locationResult = new LocationResult() { 
          @Override 
          public void gotLocation(Location location) {    
           // Got the location! 
           location.getLatitude(); 
           location.getLongitude(); 

           String loc = location.getLatitude() + "," 
             + location.getLongitude(); 

           etLocation.setText(loc); 
          } 
         };       
         MyLocation myLocation = new MyLocation(); 
         myLocation.getLocation(context, locationResult); 
        } 
       } 
      }).show(); 
} 

MyLocation:

public class MyLocation { 
Timer timer1; 
LocationManager lm; 
LocationResult locationResult; 
boolean gps_enabled = false; 
boolean network_enabled = false; 

public boolean getLocation(Context context, LocationResult result) { 
    // I use LocationResult callback class to pass location value from 
    // MyLocation to user code. 
    locationResult = result; 
    if (lm == null) 
     lm = (LocationManager) context 
       .getSystemService(Context.LOCATION_SERVICE); 

    // exceptions will be thrown if provider is not permitted. 
    try { 
     gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    } catch (Exception ex) { 
    } 
    try { 
     network_enabled = lm 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
    } catch (Exception ex) { 
    } 

    // don't start listeners if no provider is enabled 
    if (!gps_enabled && !network_enabled) 
     return false; 

    if (gps_enabled) 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 
       locationListenerGps); 
    if (network_enabled) 
     lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, 
       locationListenerNetwork); 
    timer1 = new Timer(); 
    timer1.schedule(new GetLastLocation(), 20000); 
    return true; 
} 

LocationListener locationListenerGps = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     timer1.cancel(); 
     locationResult.gotLocation(location); 
     lm.removeUpdates(this); 
     lm.removeUpdates(locationListenerNetwork); 
    } 

    public void onProviderDisabled(String provider) { 
    } 

    public void onProviderEnabled(String provider) { 
    } 

    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
}; 

LocationListener locationListenerNetwork = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     timer1.cancel(); 
     locationResult.gotLocation(location); 
     lm.removeUpdates(this); 
     lm.removeUpdates(locationListenerGps); 
    } 

    public void onProviderDisabled(String provider) { 
    } 

    public void onProviderEnabled(String provider) { 
    } 

    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
}; 

class GetLastLocation extends TimerTask { 
    @Override 
    public void run() { 
     lm.removeUpdates(locationListenerGps); 
     lm.removeUpdates(locationListenerNetwork); 

     Location net_loc = null, gps_loc = null; 
     if (gps_enabled) 
      gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     if (network_enabled) 
      net_loc = lm 
        .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

     // if there are both values use the latest one 
     if (gps_loc != null && net_loc != null) { 
      if (gps_loc.getTime() > net_loc.getTime()) 
       locationResult.gotLocation(gps_loc); 
      else 
       locationResult.gotLocation(net_loc); 
      return; 
     } 

     if (gps_loc != null) { 
      locationResult.gotLocation(gps_loc); 
      return; 
     } 
     if (net_loc != null) { 
      locationResult.gotLocation(net_loc); 
      return; 
     } 
     locationResult.gotLocation(null); 
    } 
} 

public static abstract class LocationResult { 
    public abstract void gotLocation(Location location); 
} 
} 
+0

我拉下來。我做了一些非常不喜歡的事情。 *咳嗽*權限**咳嗽咳嗽**不說什麼 – Rick

回答

0

與你的對話將您的片段。


YourFragment.java

public class YourFragment extends Fragment { 
    YourFragment mYourFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     mYourFragment = this; 
     ... 
    } 
} 

YourDialog.java

public class ClearDialogModern extends DialogFragment { 
    YourFragment mContent; 

    ... 

public void setContent(YourFragment content) { 
    mContent = content; 
} 

在創作YourDialog的:

newYourDialog = new YourDialog(); 
newYourDialog.setContent(mContent); 

如何從的getLocation YourFragment.javaYourDialog.java

mContent.getLocation();

相關問題