0

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

4

2 回答 2

1

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

于 2012-09-07T10:01:09.860 回答
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,但实际上应该始终如此。

如果您只需要将您的应用程序对象用作“上下文”,那么您可以调用“context.getApplicationContext()”方法:

public class MyLinearLayout extends LinearLayout {
  private Context mAppContext; 

  public MyLinearLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    mAppContext = context.getApplicationContext();
  }
}
于 2012-09-07T10:24:09.963 回答