2011-12-20 27 views
11

Me gustaría crear un CustomButton que tiene un onClick predefinido. De hecho, mi objetivo sería hacer el mismo trabajo queBotón Android onclick anular

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

¿Hay una manera de integrar la Listener en el objeto CustomButton que hereda de botón? Lo que me gustaría es crear un CustomButton en mi archivo XML diseño, y no tener que mencionar en este botón en mi actividad, lo que daría:

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); 
    } 
} 

Muchas gracias.

Respuesta

22

Eras muy cerca:

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 
    } 

} 
2

En su clase de botón solo implemento:

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

O si desea un control más granular:

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

Puede implementar su lógica clic en el método marcando la event.getAction (), o envíelo a un GestureDetector para averiguar cuándo se ha realizado un clic.

3

utilizar ese código:

class CustomButton extends Button implements View.OnClickListener{ 
    CustomButton(Context c, AttributeSet attrs) { 
     ... 
     setOnClickListener(this); 
     ... 
    } 

    @override 
    public void onClick(View v){ 
     //add your code here 
    } 
} 
Cuestiones relacionadas