“静态”startActivity(Intent)方法?

时间:2011-04-17 05:34:01

标签: android

我有一个按钮。它的View.OnClickHandler实现类实例化了大约3个构造函数,这些构造函数来自对android.app.Activity对象的最近引用。点击后,我希望它打开位置设置面板,以便用户可以通过启动Settings.ACTION_LOCATION_SOURCE_SETTINGS意图启用GPS和/或基于网络的位置。

没有将那个父Activity对象从构造函数传递给构造函数,所以我的onClick()方法可以看到它,有没有办法直接进入隐喻的静态以太和尖叫,“嘿,Android。 ..启动Settings.ACTION_LOCATION_SOURCE_SETTINGS“而不必将实际的活动对象用于其startActivity方法吗?

3 个答案:

答案 0 :(得分:10)

这对我有用:

public class StartGame extends Activity {

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

    public static void nextPass(Activity context) {
        Intent intent = new Intent(context,your.class);
        context.startActivity(intent);
    }

}

答案 1 :(得分:3)

我相信你说你需要一个Activity对象作为new Intent的第一个参数或其他一些生成意图的方法。如果我错了,请纠正我。如果是这种情况,您实际上只需要一个Context对象(ActivityContext的子类),在这种情况下可能没什么帮助。

我需要查看代码,以确保没有办法从您需要的位置整齐地获取上下文对象。可能有某种方法可以做到这一点(例如,从匿名对象范围访问外部变量;在Android上使用处理程序的相当常见的模式)。

我会说在我的一些应用程序中,我确实传递了大量的上下文对象。我个人认为这种做法(称为依赖注入)并不像一些工程师所想的那么糟糕。如果你在应用程序的深处使用管理器或状态负载的对象,那么用全局访问器或自动依赖注入来隐藏这个事实,只是在论证这个事实。

以下是关于此主题的另外两个关于Android上下文对象的类似问题:

Static way to get 'Context' on Android?

Using Application context everywhere?

答案 2 :(得分:0)

如果您在同一个班级,请使用YourActivity.this作为上下文,而不是this