如何使用按钮单击停止onLocationChanged()方法?

ami*_*ura 2 gps android locationlistener

我是android开发的初学者。我使用实现LocationListener的Gps服务。我想使用按钮单击来停止onLocationChanged()方法。我试图这样做,将空值分配给locationManager变量,但是它不起作用。

public class TabFragment1 extends Fragment implements LocationListener {
    ImageButton btnRUN;
    ImageButton btnSTOP;
    private LocationManager locationManager;
    Context ctx;
    private double lat_new, lon_new = 0.0;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ctx = container.getContext();
        View view = inflater.inflate(R.layout.tab_fragment_1, container, false);

        initializeApp(view);
        return view;
    }


    private void initializeApp(View view) {
        btnRUN = (ImageButton) view.findViewById(R.id.btnRun);
        btnSTOP= (ImageButton) view.findViewById(R.id.btnStop);


        btnRUN.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                runOnClick();
            }
        });

        btnSTOP.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                stopOnClick();

            }
        });

    }
    public void stopOnClick(){
          locationManager =null;
    }

    public void runOnClick() {



        locationManager = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 10, this);


    }


    @Override
    public void onLocationChanged(Location location) {
        lat_new=location.getLatitude();
        lon_new=location.getLongitude();



        String str="Lat :"+lat_new +"Lon :"+lon_new;
        Toast.makeText(ctx,str,Toast.LENGTH_LONG).show();
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {
        Toast.makeText(ctx, "Gps turned on ", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(ctx, "Gps turned off ", Toast.LENGTH_LONG).show();
    }


} 
Run Code Online (Sandbox Code Playgroud)

Sev*_*vle 5

 public void stopOnClick(){
        locationManager.removeUpdates(this);
    } 
Run Code Online (Sandbox Code Playgroud)

应该可以工作,因为您的LocationListener是由Fragment实现的

注意:不要忘记在片段的onPause上取消注册位置侦听器,以避免当服务尝试在“ onLocationChanged”上找到TabFragment1时崩溃(假设用户浏览应用程序的另一个片段/活动而无需按“ stopOnClick”按钮):

    @Override
    public void onPause() {
        locationManager.removeUpdates(this);
        super.onPause();
    }
Run Code Online (Sandbox Code Playgroud)