Application オブジェクトにアクセスする必要がある複合コントロールがあります。私のコントロールは LinearLayout を拡張するので、Activity ではないため、getApplication() を呼び出すことはできません。レイアウト/ビューからこれを行う方法、またはアプリケーションを渡す方法はありますか?
2 に答える
            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();
  }
}
    于 2012-09-07T10:24:09.963   に答える
    
    
            1        
        
		
My Control Class を呼び出すときは、ConstructorでContextを渡す必要があります。
于 2012-09-07T10:01:09.860   に答える