从 Activity 传递上下文

Pass Context from Activity

好吧,直截了当我是这个 android 编程的初学者,由于 "cant resolve method getapplicationcontext"[=15=,我对如何从我的 activity 传递上下文有疑问]

这是 MyLocationListener.java :

 public class MyLocationListener implements LocationListener {
        // Dipanggil saat ada perubahan lokasi geografis pengguna

private Context mContext;

    public MyLocationListener(Context context) {
        mContext = context;
    }

        @Override
        public void onLocationChanged(Location location) {
    // Mendapatkan nilai latitude dari lokasi terbaru
            double latitude = location.getLatitude();

    // Mendapatkan nilai longitude dari lokasi terbaru
            double longitude = location.getLongitude();

    // Menampilkan lokasi terbaru menggunakan Toast
            String message = "Lokasi saat ini :\n" +
                    "Latitude  = " + latitude + "\n" +
                    "Longitude = " + longitude;
            Toast.makeText(getApplicationContext(),
                    message, Toast.LENGTH_LONG).show();
        }

        // Dipanggil saat provider dinon-aktifkan oleh pengguna
        @Override
        public void onProviderDisabled(String provider) {
            String message = "GPS disabled";
            Toast.makeText(getApplicationContext(),
                    message, Toast.LENGTH_LONG).show();
        }

        // dipanggil saat provider diaktifkan oleh pengguna
        @Override
        public void onProviderEnabled(String provider) {
            String message = "GPS enabled";
            Toast.makeText(getApplicationContext(),
                    message, Toast.LENGTH_LONG).show();
        }

        // dipanggil saat ada perubahan status pada provider
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub
        }
    }

这是我的 activity (GPSSample.java) :

public class GPSSample extends Activity {
        /** Called when the activity is first created. */
        @Override

LocationListener myLocationListener = new MyLocationListener(this);

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

    // Inisiasi LocationManager dan LocationListener
            LocationManager myLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            LocationListener myLocationListener = new MyLocationListener();
            myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myLocationListener);
        }

上面说要用constructor传,怎么传? 我有一些构造函数示例,但我不知道把它放在哪里,并根据我的脚本重命名它

MyClass myClass = new MyClass(this);

然后在 class 中创建一个接受 Context 作为参数的构造函数并使用它

public class MyClass  
{ 
    Context c;
    public MyClass(Context context)
    { 
         c= context;
     } 
}} 

感谢您的帮助...

1

您需要将上下文作为传入参数传递。

public class MyLocationListener implements LocationListener {

    // Dipanggil saat ada perubahan lokasi geografis pengguna
    private Context mContext;

    public MyLocationListener(Context context) {
        mContext = context;
    }

    @Override
    public void onLocationChanged(Location location) {
// Mendapatkan nilai latitude dari lokasi terbaru
        double latitude = location.getLatitude();

// Mendapatkan nilai longitude dari lokasi terbaru
        double longitude = location.getLongitude();

// Menampilkan lokasi terbaru menggunakan Toast
        String message = "Lokasi saat ini :\n" +
                "Latitude  = " + latitude + "\n" +
                "Longitude = " + longitude;
        // change getApplicationContext() to mContext(inner context reference)
        Toast.makeText(mContext,
                message, Toast.LENGTH_LONG).show();
    }

    // Dipanggil saat provider dinon-aktifkan oleh pengguna
    @Override
    public void onProviderDisabled(String provider) {
        String message = "GPS disabled";
        // change getApplicationContext() to mContext(inner context reference)
        Toast.makeText(mContext,
                message, Toast.LENGTH_LONG).show();
    }

    // dipanggil saat provider diaktifkan oleh pengguna
    @Override
    public void onProviderEnabled(String provider) {
        String message = "GPS enabled";
        // change getApplicationContext() to mContext(inner context reference)
        Toast.makeText(mContext,
                message, Toast.LENGTH_LONG).show();
    }

    // dipanggil saat ada perubahan status pada provider
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
    }
}

并在 Activity 中设置:

LocationListener myLocationListener = new MyLocationListener(this);

2

您也可以使用 .this 构造来使用自引用。 .this - 在 Java - 是他自己的参考。 但是如果 class 是静态的——你会得到编译错误。

只需使用 GPSSample.this 而不是 getApplicationContext()。这是 "outer this",即父 class 的 this,在这种情况下,是 activity(并且 activity 是子 class上下文)。

如果您需要移动侦听器(我不这么认为),请使用构造函数。通常你甚至会使用匿名 classes 而不是具体的听众。阅读起来更直接清晰。