2013-02-17 6 views
5

Provo a riprodurre un suono quando si preme qualsiasi pulsante dell'app.Come aggiungere un listener generale per tutti i pulsanti (non invadente)?

Qual è il modo meno invasivo di aggiungere l'ascoltatore a tutti i pulsanti nell'app?

Posso aggiungere sovrascrivere (ed estendere) l'ascoltatore generico di Android?

Grazie.

+0

creare un pulsante personalizzato estendendo classe Button e impostare Listener ci – Pragnani

+0

o utilizzare XML per questo: Android: onClick = "someMethod" nel layout-xml, dare a tutti i pulsanti l'attributo onClick. Quindi, nella tua attività, crea un metodo: someMethod, e tutti i pulsanti lo chiameranno con un clic – cIph3r

+0

Ma questi modi sono intrusivi, vorrei non toccare i miei vecchi ascoltatori. –

risposta

3

È possibile impostare un listener per tutti i pulsanti e può essere identificato anche con il tag.

View.OnClickListener myClickLIstener= new View.OnClickListener() { 
    public void onClick(View v) { 
     String tag = (String) v.getTag(); 
     Log.e("","tag : "+tag) 
     // your stuff 
    } 
}; 

istituiscono ascoltatori ...

btn1.setOnClickListener(myClickLIstener); 
btn1.setTag("btn1"); 
btn2.setOnClickListener(myClickLIstener); 
btn2.setTag("btn2"); 

EDIT:

Siete alla ricerca di come questo ...

class superTop implements View.OnClickListener { 

     @Override 
     public void onClick(View v) { 
      Log.e("", "onClick superTop"); 
     } 

    } 

    class NewClick extends superTop implements View.OnClickListener { 

     @Override 
     public void onClick(View v) { 
      Log.e("", "onClick NewClick"); 

      super.onClick(v); 

     } 

    } 

    findViewById(R.id.button1).setOnClickListener(new NewClick()); 

È possibile chiamare sia l'ascoltatore ...

+0

Ma questi modi sono intrusivi, vorrei non toccare i miei vecchi ascoltatori. –

+0

Se si desidera eseguire l'override o l'estendere il listener, non è possibile perché gli ascoltatori sono 'interface'. Devi creare un'interfaccia personalizzata per questo e chiamarli da btnclickListener. Se hai una funzionalità comman per roba, rendi la classe base ed estendila. Questo può aiutarti. –

+0

Potresti implementare View.OnClickListener? Nell'implementazione MyOnClickListener definisce il proprio metodo onClick() con comportamento generico e quindi nell'attività MyOnClickListener myClickListener = new MyOnClickListener() { public void onClick (View v) {super.onclick(); String tag = (String) v.getTag(); Log.e ("", "tag:" + tag) // your stuff } –

1

È possibile utilizzare l'attributo . Impostare lo stesso metodo onClick a tutti loro in questo modo:

<Button 
[...] 
android:onClick="handleButton"/> 

<Button 
[...] 
android:onClick="handleButton"/> 

E nel file java:

public void handleButton(View v){ 
// do some stuff 
} 
+0

Ma questi modi sono intrusivi, vorrei non toccare i miei vecchi ascoltatori. –

1

Creare uno scatto Listener come questo e chiamare da tutti i pulsanti, se vuoi che facciano lo stesso

View.OnClickListener yourClickListener = new View.OnClickListener() { 
     public void onClick(View v) { 
      //play the music 
     } 
    }; 

quindi chiamare che ascoltatore

button1.setOnClickListener(yourClickListener); 
button2.setOnClickListener(yourClickListener); 
button3.setOnClickListener(yourClickListener); 
3

O SOLO

class YourClass implements OnClickListener{ 
    buttonOne.setOnclickListener(this); 
    buttonTwo.setOnclickListener(this); 
    buttonThree.setOnclickListener(this); 

    public void onClick(View v){ 
     //do your stuff; 
    } 
} 

O se gradite, rendere il vostro pulsante personalizzato:

Class Yourbutton extends Button implements Button.OnClickListener{ 
    public Yourbutton(Context c) { 
     super(c); 
    } 
    public Yourbutton(Context c,AttributeSet s){ 
     super(c,s); 
    } 
    public void onClick(View v){ 
     //do your stuff; 
    } 
} 

Così ora è possibile utilizzare Yorkbutton come il pulsante generico che fa i lavori generici.

+0

Ma questi modi sono intrusivi, vorrei non toccare i miei vecchi ascoltatori. –

2

È possibile farlo prima lasciate che la vostra classe implementare l'OnClickListener

button1.setOnClickListener(this); 
button2.setOnClickListener(this); 

Nel metodo onClick effettuare le seguenti operazioni:

public void onClick(View view) { 


    switch(view.getId()){ 

//here you need the id of the button i.e. its id in the xml file 
    case R.id.button1: 
     // do whatever you want button1 to do 
     break; 
    case R.id.button2: 
     // do whatever you want button2 to do 
     break; 
    } 
} 
0

chiamata stessi metodi dei pulsanti che si desidera lavorare stesso come

<LinearLayout ...> 
    <Button android:text="1" onClick="onButtonClicked" clickable="true" /> 
    <Button android:text="2" onClick="onButtonClicked" clickable="true" /> 
    <Button android:text="3" onClick="onButtonClicked" clickable="true" /> 
    <Button android:text="4" onClick="onButtonClicked" clickable="true" /> 
</LinearLayout> 

Sopra i quattro pulsanti hanno un testo diverso ma onClick hanno lo stesso metodo ora non è necessario ottenerli nella classe java g findViewById.

Nell'attività in cui viene mostrato il layout è sufficiente aggiungere un metodo di

public void onButtonClicked(View v){ 
    // do whatever needs to be done. For example: 
    Toast.makeText(getApplicationContext(), ((Button) v).getText() + " clicked", Toast.LENGTH_SHORT).show(); 
} 

Secondo metodo

Non c'è bisogno di ripetere lo stesso codice per tutti. È possibile provare un ascoltatore generica, come:

private OnClickListener genericClickListener= new OnClickListener() { 
    public void Click(View v) { 
      // do something 
    } 
}; 

Poi tutto quello che dovete fare è registrare tutti i tre pulsanti per utilizzare questo genericClickListener. Cioè, all'interno onCreate(),

Button firstbtn = (Button) findViewById(R.id.firstbtn); 
Button secondbtn = (Button) findViewById(R.id.secondbtn); 
Button thirdbtn = (Button) findViewById(R.id.thirdbtn); 

firstbtn.setOnClickListener(genericClickListener); 
secondbtn.setOnClickListener(genericClickListener); 
thirdbtn.setOnClickListener(genericClickListener); 

Terzo metodo

Creare una singola funzione/metodo e onClick di tutte le chiamate sul pulsante stesso Method/Function.

Problemi correlati