Search code examples
androidclassconstructorandroid-linearlayoutextend

How to pass additional arguments to a Constructor when extending a LinearLayout in Android?


I have the following question, if I have a class extending a LinearLayout like:

public class ExtendedSeekbarLayout extends LinearLayout { ..}

and I would like to pass additional Arguments to my Layout, how do I do this? I know that I could have the following constructors like:

 public ExtendedSeekbarLayout (Context context) {
    super(context);

}

public ExtendedSeekbarLayout (Context context, AttributeSet attributeSet) {
    super(context, attributeSet);

}

public ExtendedSeekbarLayout (Context context, AttributeSet attributeSet, int defStyle) {
    super(context, attributeSet, defStyle);

}

but I would like to have something like:

 public ExtendedSeekbarLayout (Context context, AttributeSet attributeSet, int defStyle, int position) {
    super(context, attributeSet, defStyle);
    init(position);

}

I'm not sure if this is possible, if not, which would be the way to go then?

Thanks a lot and cheers, pingu


Solution

  • This constructor that you shared should work exactly as you expect.

    public ExtendedSeekbarLayout (Context context, AttributeSet attributeSet, int defStyle, int position) {
        super(context, attributeSet, defStyle);
        init(position);
    }
    

    Btw you don't necessarily need to have this constructor, as long as you call

    super(context);
    

    You can do this in case of programmatically instantiating a view:

    public ExtendedSeekbarLayout (Context context, int position) {
        super(context);
        init(position);
    }
    

    But if you are talking about sending a custom value from xml, where you don't actually call a constructor, then you should look at this answer: https://stackoverflow.com/a/7608739/2534007