Android RoboGuice 使用指南(15):Inject Context

jerry Android 2015年08月24日 收藏

在Android应用程序中,很多地方需要引用到Context对象(Activity,Application,Service等)。Roboguice 使得引用Context对象变得非常容易。

可以参见下面例子,这里定义一个不在Activity中的类ContextInfo,需要引用Context对象:

  1. class ContextInfo{
  2.  
  3. final Context context;
  4. @Inject
  5. ContextInfo(Context context){
  6. this.context=context;
  7. }
  8.  
  9. String getPackageName(){
  10. return context.getApplicationInfo().packageName;
  11. }
  12. }

需要应用Context对象时,使用@Inject 标记,Roboguice会自动注入所需Context对象。

定义一个InjectContextDemo,使用一个TextView来显示ContextInfo的getPackageName内容。

  1. public class InjectContextDemo extends RoboActivity {
  2.  
  3. @InjectView (R.id.textview) TextView textView;
  4. @Inject ContextInfo contextInfo;
  5.  
  6. @Override
  7. public void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9.  
  10. setContentView(R.layout.injectcontext);
  11. textView.setText(contextInfo.getPackageName());
  12.  
  13. }
  14.  
  15. }

在InjectContextDemo中定义一个InjectContextDemo,也使用@Inject 通知Roboguice自动创建它的一个实例。Roboguice在创建这个对象时,调用其Injectable 构造函数(参见Android RoboGuice 使用指南(10): Just-in-time Bindings ),自动传入Context对象。

如果需要应用Application对象,可以将构造函数改为

  1. @Inject
  2. ContextInfo(RoboguiceDemoApplication context){
  3. this.context=context;
  4. }

或引用Activity

  1. @Inject
  2. ContextInfo(Activity context){
  3. this.context=context;
  4. }