I want to make a custom RelativeLayout, but I keep getting this error:
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)
And here's my class:
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));
}
}
}
}
What am I doing wrong?
You implemented only one constructor. To be able use views in xml, you should implement 2 other constructors from View:
public CheckableRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CheckableRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
You forgot to override constructor, each layout can be created from code or from XML and for creation used different constructors, override another one
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With