Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android button onclick override

I would like to create a CustomButton which has a predefined onClick. In fact, my object would do the same job than

CustomButton mButton = getViewById(..);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
  show_something()
}

Is there a way to embed the Listener into the CustomButton object that inherits from Button ? What I would like is to create a CustomButton in my layout XML file, and not having to mention this button in my activity, which would give:

main.xml:

<LinearLayout xmlns:"...">
     <com.mypackage.view.CustomButton
         (attributes)/>
</LinearLayout>

CustomButton.java:

class CustomButton extends Button implements... {

@Override
OnClick (or something like that, that's the core of my question, what to put here)
}

myActivity.java

public class myActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    }
}

Thanks a lot.

like image 888
Flavian Hautbois Avatar asked Dec 20 '11 13:12

Flavian Hautbois


People also ask

How to handle onClick event of button in Android?

To define the click event handler for a button, add the android:onClick attribute to the <Button> element in your XML layout. The value for this attribute must be the name of the method you want to call in response to a click event. The Activity hosting the layout must then implement the corresponding method.

Why we use setOnClickListener in Android?

setOnClickListener(this); means that you want to assign listener for your Button “on this instance” this instance represents OnClickListener and for this reason your class have to implement that interface. If you have more than one button click event, you can use switch case to identify which button is clicked.


2 Answers

You were really close:

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class CustomButton extends Button implements OnClickListener{

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

    public CustomButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomButton(Context context) {
        super(context);
        init();
    }

    private void init(){
        setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // Do something
    }

}
like image 56
Blundell Avatar answered Oct 16 '22 02:10

Blundell


In your button class just implement:

@Override
public void onClick(View v) {
    showSomething();
}

Or if you want more granular control:

@Override
public boolean onTouchEvent(MotionEvent event) {
    showSomething();
}

You can either implement your click logic in the method by checking the event.getAction(), or send it to a GestureDetector to figure out when a click has been performed.

like image 44
TofferJ Avatar answered Oct 16 '22 01:10

TofferJ