我有一个按钮。它的View.OnClickHandler实现类实例化了大约3个构造函数,这些构造函数来自对android.app.Activity对象的最近引用。点击后,我希望它打开位置设置面板,以便用户可以通过启动Settings.ACTION_LOCATION_SOURCE_SETTINGS
意图启用GPS和/或基于网络的位置。
没有将那个父Activity对象从构造函数传递给构造函数,所以我的onClick()
方法可以看到它,有没有办法直接进入隐喻的静态以太和尖叫,“嘿,Android。 ..启动Settings.ACTION_LOCATION_SOURCE_SETTINGS
“而不必将实际的活动对象用于其startActivity方法吗?
答案 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
对象(Activity
是Context
的子类),在这种情况下可能没什么帮助。
我需要查看代码,以确保没有办法从您需要的位置整齐地获取上下文对象。可能有某种方法可以做到这一点(例如,从匿名对象范围访问外部变量;在Android上使用处理程序的相当常见的模式)。
我会说在我的一些应用程序中,我确实传递了大量的上下文对象。我个人认为这种做法(称为依赖注入)并不像一些工程师所想的那么糟糕。如果你在应用程序的深处使用管理器或状态负载的对象,那么用全局访问器或自动依赖注入来隐藏这个事实,只是在论证这个事实。
以下是关于此主题的另外两个关于Android上下文对象的类似问题:
答案 2 :(得分:0)
如果您在同一个班级,请使用YourActivity.this
作为上下文,而不是this
。