2011-12-20 20 views
11

Vorrei creare un CustomButton che ha un numero predefinito onClick. In realtà, il mio scopo sarebbe fare lo stesso lavoro diPulsante Android onclick override

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

C'è un modo per incorporare il Listener nell'oggetto CustomButton che eredita da Button? Quello che vorrei è quello di creare un CustomButton nel mio file XML di layout, e non dover parlare di questo pulsante nella mia attività, che darebbe:

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

Grazie mille.

risposta

22

Eri davvero vicino:

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

Nella classe pulsante solo attuare:

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

Oppure, se si desidera un controllo più granulare:

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

è possibile implementare la logica di scatto nel metodo controllando l'event.getAction (), o inviarlo a un GestureDetector per capire quando un clic è stato eseguito.

3

usare quel codice:

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

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