我真的不明白整个事情是如何工作的,所以如果我有一些A类需要扩展Activity的B类的上下文,我如何获得那个上下文呢?
我正在寻找一种比将上下文作为参数提供给类A构造函数更有效的方法。例如,如果类A将有数百万个实例,那么我们最终将拥有数百万个指向Context的冗余指针,而我们应该以某种方式只在某个地方拥有一个和一个getter函数……
发布于 2012-09-07 23:45:24
您可以使用Application类( android.application包中的公共类),即:
基类,适用于需要维护全局应用程序状态的用户。您可以通过在AndroidManifest.xml的标记中指定其名称来提供您自己的实现,这将导致在创建应用程序/包的进程时为您实例化该类。
要使用此类,请执行以下操作:
public class App extends Application {
private static Context mContext;
public static Context getContext() {
return mContext;
}
public static void setContext(Context mContext) {
this.mContext = mContext;
}
...
}在您的清单中:
<application
android:icon="..."
android:label="..."
android:name="com.example.yourmainpackagename.App" >
class that extends Application ^^^在活动B中:
public class B extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sampleactivitylayout);
App.setContext(this);
...
}
...
}在A类中:
Context c = App.getContext();备注:
通常不需要子类化应用程序。在大多数情况下,静态单例可以以更模块化的方式提供相同的功能。如果您的单例需要全局上下文(例如注册广播接收器),则可以为检索它的函数提供一个上下文,该上下文在第一次构造单例时在内部使用Context.getApplicationContext()。
发布于 2012-09-07 23:24:09
好的,我会给出一个小例子,告诉你怎么做
public class ClassB extends Activity
{
ClassA A1 = new ClassA(this); // for activity context
ClassA A2 = new ClassA(getApplicationContext()); // for application context.
}发布于 2016-10-22 23:09:58
获取活动上下文的最好、最简单的方法是将.this放在活动名称之后。例如:如果您的活动名称为SecondActivity,则其上下文将为SecondActivity.this
https://stackoverflow.com/questions/12320857
复制相似问题