2012-09-03 17 views
24

ho appena aggiunto una nuova cartella drawable nella cartella res. Nella cartella drawable ho copiato il file ic_launcher.png dalla cartella drawable-hdpi. Voglio cambiare l'immagine ImageButton standard con quella nuova quando premo il pulsante. Ho scritto del codice, ma quando avvio l'app si blocca.android Imagebutton cambia immagine OnClick

Button imgButton; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    findViewById(R.id.imgButton).setOnClickListener(imgButtonHandler);  
} 

View.OnClickListener imgButtonHandler = new View.OnClickListener() { 

    public void onClick(View v) { 

     imgButton.setBackgroundResource(R.drawable.ic_launcher); 

    } 
}; 

MODIFICA: l'ho modificato e anche questo non funziona.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    imgButton = (Button) findViewById(R.id.imgButton); 
    imgButton.setOnClickListener(imgButtonHandler); 
} 


View.OnClickListener imgButtonHandler = new View.OnClickListener() { 

    public void onClick(View v) { 
     imgButton.setBackgroundResource(R.drawable.ic_launcher); 

    } 
}; 

MODIFICA 2: FUNZIONA. Grazie a tutti.

ImageButton button; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    button= (ImageButton)findViewById(R.id.imgButton); 
    button.setOnClickListener(imgButtonHandler); 
} 


View.OnClickListener imgButtonHandler = new View.OnClickListener() { 

    public void onClick(View v) { 
     button.setBackgroundResource(R.drawable.ic_launcher); 

    } 
}; 
+0

Si dovrebbe incollare qui il tuo errore dal logcat. – hsz

+0

NullpointerException coz imgButton è null ... puoi lanciare View v to Button o impostare imgButton dopo setContentView ... – Selvin

+0

La tua modifica è la mia risposta, e questo funziona! – Carnal

risposta

6

Ciò è dovuto al fatto che imgButton è null. Prova a modificare:

findViewById(R.id.imgButton).setBackgroundResource(R.drawable.ic_action_search); 

o molto più facile da leggere:

imgButton = (Button) findViewById(R.id.imgButton); 
imgButton.setOnClickListener(imgButtonHandler); 

poi nel onClick: imgButton.setBackgroundResource(R.drawable.ic_action_search);

+0

No ... è ok, ho modificato ora. Non funziona con ic_launcher.png – user1205415

+0

findViewById (R.id.imgButton) .setBackgroundResource (R.drawable.ic_launcher); Ha ... questo ha funzionato. Quando lo avvio, ha la nuova immagine. Quindi non capisco, perché il codice sopra non funziona in onClick? – user1205415

+0

Non funziona perché hai Button imgButton; dichiarato .. ma non si avvia una vista, ecco perché. Quando si utilizza findViewById (...) si ottiene la visualizzazione del pulsante (pulsante in questo caso), quindi funziona. – Carnal

1

pulsante Hai assing al vostro imgButton variabile:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    imgButton = (Button) findViewById(R.id.imgButton); 
    imgButton.setOnClickListener(imgButtonHandler); 
} 
3

Puoi farlo nel tuo file XML:

android:onClick="@drawable/ic_action_search" 
+0

OK, ma cosa succede quando clicco di nuovo sul pulsante, voglio la vecchia immagine. Come un pulsante di attivazione/disattivazione. – user1205415

+2

ma ciò non modifica l'immagine, ma blocca l'attività con un log ** 'java.lang.IllegalStateException: Impossibile trovare un metodo res/drawable-hdpi/menu_mission_touch.png (Visualizza) nella classe di attività com.test.MainMenu per gestore onClick su classe vista android.widget.ImageButton con id 'menu_mission' '** –

+0

non è possibile! – Jorgesys

49

questo mi misleaded un po '- dovrebbe essere "setImageResource" invece di "setBackgroundResource" :) !!

Il seguente funziona bene:

ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);  
btn.setImageResource(R.drawable.actions_record); 

mentre quando si utilizzano i setBackgroundResource immagine del ImageButton attuale soggiorni, mentre l'immagine di sfondo viene modificata strega porta ad un brutto cercando ImageButton opporsi

Grazie.

+0

corretto; facendo 'setBackgroundResource' sembra allungare l'immagine per adattarla al pulsante in modo che risulti distorta. – KickingLettuce

+0

fantastico lavoro ..... –

9
<ImageButton android:src="@drawable/image_btn_src" ... /> 

image_btn_src.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" android:drawable="@drawable/icon_pressed"/> 
<item android:state_pressed="false" android:drawable="@drawable/icon_unpressed"/> 
</selector> 
Problemi correlati