Ofe*_*Ron 64 android android-context
我真的不明白这整个事情是如何工作的,所以如果我有一些类A
需要B
扩展的类的上下文,Activity
我该如何获得该上下文?
我正在寻找一种比将上下文作为类A
构造函数的参数更有效的方法.例如,如果类A
将有数百万个实例,那么我们最终会有数百万个冗余指针,Context
而我们应该能够以某种方式只有一个地方和一个getter函数......
Gan*_*Gan 48
好的,我将举例说明如何做你要求的
public class ClassB extends Activity
{
ClassA A1 = new ClassA(this); // for activity context
ClassA A2 = new ClassA(getApplicationContext()); // for application context.
}
Run Code Online (Sandbox Code Playgroud)
has*_*ian 37
你可以使用Application
class(android.application包中的public class),即:
需要维护全局应用程序状态的基类.您可以通过在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;
}
...
}
Run Code Online (Sandbox Code Playgroud)
在你的清单中:
<application
android:icon="..."
android:label="..."
android:name="com.example.yourmainpackagename.App" >
class that extends Application ^^^
Run Code Online (Sandbox Code Playgroud)
在活动B中:
public class B extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sampleactivitylayout);
App.setContext(this);
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
在A班:
Context c = App.getContext();
Run Code Online (Sandbox Code Playgroud)
注意:
通常不需要子类Application.在大多数情况下,静态单例可以以更模块化的方式提供相同的功能.如果你的单例需要一个全局上下文(例如注册广播接收器),那么检索它的函数可以给一个Context,它在第一次构造单例时在内部使用Context.getApplicationContext().
归档时间: |
|
查看次数: |
213425 次 |
最近记录: |