GetApplication in或传递给复合控制

时间:2012-09-07 09:59:45

标签: android

我有一个需要访问Application对象的复合控件。我的控件扩展了LinearLayout,因为它不是一个Activity我不能调用getApplication()。有没有办法从布局/视图中执行此操作或传递应用程序?

2 个答案:

答案 0 :(得分:1)

调用My Control Class时,必须在构造函数中传递上下文

答案 1 :(得分:1)

根据你需要Application对象的内容,你可以做几件事。

如果您需要特定的应用程序实例,可以尝试将Context对象转换为Activity

public class MyLinearLayout extends LinearLayout {
  private Application mApplication; 

  public MyLinearLayout(Context context, AttributeSet attrs) {
    super(context, attrs);

    //As this is a custom ViewGroup, Context will be an Activity, but just to make sure..
    if(context instanceof Activity)
        mApplication = ((Activity) context).getApplication();
    else
        throw new IllegalArguementException("Context must be an Activity");
  }
}

上面的代码检查以确保传递给您的自定义视图的Context是一个Activity,但实际上应该总是这样。

如果您只需要将Application对象用作`Context',那么可以调用'context.getApplicationContext()'方法:

public class MyLinearLayout extends LinearLayout {
  private Context mAppContext; 

  public MyLinearLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    mAppContext = context.getApplicationContext();
  }
}