2011-12-20 11 views
11

Chciałbym utworzyć CustomButton, który ma predefiniowane onClick. W rzeczywistości, mój obiekt zrobi taką samą pracę niżPrzycisk nadrzędny onclick systemu Android

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

Czy istnieje sposób aby osadzić Listener do obiektu CustomButton która dziedziczy od Buttona? Co chciałbym jest stworzenie CustomButton w moim pliku XML układu i nie trzeba wspominać ten przycisk w mojej działalności, która dałaby:

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

Wielkie dzięki.

Odpowiedz

22

Ty naprawdę blisko:

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

W swojej klasie przycisk prostu wdrożyć:

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

Albo jeśli chcesz bardziej precyzyjną kontrolę:

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

Można też wdrożyć kliknij logikę w metodzie zaznaczając event.getAction () lub wysłać go do GestureDetector, aby dowiedzieć się, kiedy kliknięcie zostało wykonane.

3

Użyj tego kodu:

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

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