Как правильно расширить класс макета?

Я хочу создать пользовательский RelativeLayout, но я продолжаю получать эту ошибку:

08-01 02:28:19.385: E/AndroidRuntime(9989): FATAL EXCEPTION: main 08-01 02:28:19.385: E/AndroidRuntime(9989): android.view.InflateException: Binary XML file line #1: Error inflating class com.stevenschoen.putio.CheckableRelativeLayout 08-01 02:28:19.385: E/AndroidRuntime(9989): at android.view.LayoutInflater.createView(LayoutInflater.java:596) 08-01 02:28:19.385: E/AndroidRuntime(9989): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 08-01 02:28:19.385: E/AndroidRuntime(9989): at android.view.LayoutInflater.inflate(LayoutInflater.java:466) 08-01 02:28:19.385: E/AndroidRuntime(9989): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) ... 08-01 02:28:19.385: E/AndroidRuntime(9989): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 08-01 02:28:19.385: E/AndroidRuntime(9989): at java.lang.Class.getConstructorOrMethod(Class.java:460) 08-01 02:28:19.385: E/AndroidRuntime(9989): at java.lang.Class.getConstructor(Class.java:431) 08-01 02:28:19.385: E/AndroidRuntime(9989): at android.view.LayoutInflater.createView(LayoutInflater.java:561) 

И вот мой класс:

 public class CheckableRelativeLayout extends RelativeLayout implements Checkable { public CheckableRelativeLayout(Context context) { super(context); // TODO Auto-generated constructor stub } private boolean isChecked; // List<Checkable> checkableViews = new ArrayList<Checkable>(); // @see android.widget.Checkable#isChecked() public boolean isChecked() { return isChecked; } // @see android.widget.Checkable#setChecked(boolean) public void setChecked(boolean isChecked) { this.isChecked = isChecked; // for (Checkable c : checkableViews) { // Pass the information to all the child Checkable widgets // c.setChecked(isChecked); // } } // @see android.widget.Checkable#toggle() public void toggle() { this.isChecked = !this.isChecked; // for (Checkable c : checkableViews) { // Pass the information to all the child Checkable widgets // c.toggle(); // } } @Override protected void onFinishInflate() { super.onFinishInflate(); final int childCount = this.getChildCount(); for (int i = 0; i < childCount; ++i) { findCheckableChildren(this.getChildAt(i)); } } /** * Add to our checkable list all the children of the view that implement the * interface Checkable */ private void findCheckableChildren(View v) { if (v instanceof Checkable) { // this.checkableViews.add((Checkable) v); } if (v instanceof ViewGroup) { final ViewGroup vg = (ViewGroup) v; final int childCount = vg.getChildCount(); for (int i = 0; i < childCount; ++i) { findCheckableChildren(vg.getChildAt(i)); } } } } 

Что я делаю не так?

Вы реализовали только один конструктор. Чтобы иметь возможность использовать представления в xml, вы должны реализовать 2 других конструктора из View:

 public CheckableRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } public CheckableRelativeLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } 

Вы забыли переопределить конструктор, каждый макет может быть создан из кода или из XML и для создания используемых разных конструкторов, переопределить другой