Autore Topic: Cambiare un'immagine di background a runtime  (Letto 798 volte)

Offline maro

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Htc Evo 3D, Hp Touchpad
  • Sistema operativo:
    Windows 7
Cambiare un'immagine di background a runtime
« il: 23 Marzo 2012, 17:08:39 CET »
0
Ciao,

mi sto scervellando da circa 5 ore alla soluzione di un semplice quesito,

alla pressione di un pulsante vorrei che si cambiasse l'immagine di background del mio layout.

sfogliando diverse guide su internet ho trovato alcune possibili soluzioni che si rifanno a

Codice (Java): [Seleziona]
LinearLayout sfondo = (LinearLayout)findViewById(R.id.background);
sfondo.setBackgroundDrawable(getResources().getDrawable(R.drawable.xxx));

o

LinearLayout sfondo = (LinearLayout)findViewById(R.id.background);
sfondo.setBackgroundResource(R.drawable.impiccato003);

in tutti e 2 i casi ottengo un java.lang.NullPointerException come se il riferimento a R fosse null.

in allegato ho inserito il logcat dell'errore.

Qualcuno sa come potrei arginare l'errore senza ricorrere ad un imageView?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Cambiare un'immagine di background a runtime
« Risposta #1 il: 23 Marzo 2012, 18:05:06 CET »
0
Il LogCat ti dice che ad un certo numero di riga del tuo codice, qualcosa è NULL e non dovrebbe. Puoi iniziare l'indagine individuando di quale riga si tratta e vedendo quali oggetti possono essere NULL.

Tirando completamente ad indovinare (uso la palla di vetro), nel main-xml potresti non aver definito l'ID del tuo LinearLayout padre di tutte le view.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline maro

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Htc Evo 3D, Hp Touchpad
  • Sistema operativo:
    Windows 7
Re:Cambiare un'immagine di background a runtime
« Risposta #2 il: 23 Marzo 2012, 18:57:21 CET »
0
Il LogCat ti dice che ad un certo numero di riga del tuo codice, qualcosa è NULL e non dovrebbe. Puoi iniziare l'indagine individuando di quale riga si tratta e vedendo quali oggetti possono essere NULL.

Tirando completamente ad indovinare (uso la palla di vetro), nel main-xml potresti non aver definito l'ID del tuo LinearLayout padre di tutte le view.

ciao grazie per la risposta,

la riga dell'errore si riferisce alla riga del codice inserito sopra nel tag e cioè:
Codice (Java): [Seleziona]
sfondo.setBackgroundDrawable(getResources().getDrawable(R.drawable.xxx));
sfondo.setBackgroundResource(R.drawable.impiccato003);

in che senso non avrei definito "LinearLayout padre di tutte le view."?
nel mio game_layout.xml (cosi l'ho chiamato che non è il main.xml) il primo LinearLayout cioè il padrè e dove è anche contenuta l'immagine di sfondo ha l'id definito cosi
Codice (XML): [Seleziona]
android:id="@+id/background"e infatti nel mio codice dell'applicazione viene richiamato cosi:
Codice (Java): [Seleziona]
LinearLayout sfondo = (LinearLayout)findViewById(R.id.background);

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Cambiare un'immagine di background a runtime
« Risposta #3 il: 23 Marzo 2012, 19:06:37 CET »
0
in che senso non avrei definito "LinearLayout padre di tutte le view."?
nel mio game_layout.xml (cosi l'ho chiamato che non è il main.xml) il primo LinearLayout cioè il padrè e dove è anche contenuta l'immagine di sfondo ha l'id definito cosi
Codice (XML): [Seleziona]
android:id="@+id/background"e infatti nel mio codice dell'applicazione viene richiamato cosi:
Codice (Java): [Seleziona]
LinearLayout sfondo = (LinearLayout)findViewById(R.id.background);

Beh, poichè tu non avevi postato il codice del layout e dell'activity, potevo solo tirare ad indovinare e purtroppo come hai visto la palla di vetro mi ha funzionato male.  :-P  Comprendo che a volte postare codice è poco pratico, ma ti assicuro che rende la vita MOLTO più facile a chi cerca di rispondere.

Se l'errore è dove tu indichi, è possibile che sfondo sia NULL, fai un Log.d() del valore di sfondo dopo che lo hai assegnato e vedi se è null. Se è null, vuol dire che quando lo assegni qualcosa non va a buon fine.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline maro

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Htc Evo 3D, Hp Touchpad
  • Sistema operativo:
    Windows 7
Re:Cambiare un'immagine di background a runtime
« Risposta #4 il: 23 Marzo 2012, 20:07:27 CET »
0
Beh, poichè tu non avevi postato il codice del layout e dell'activity, potevo solo tirare ad indovinare e purtroppo come hai visto la palla di vetro mi ha funzionato male.  :-P  Comprendo che a volte postare codice è poco pratico, ma ti assicuro che rende la vita MOLTO più facile a chi cerca di rispondere.

Se l'errore è dove tu indichi, è possibile che sfondo sia NULL, fai un Log.d() del valore di sfondo dopo che lo hai assegnato e vedi se è null. Se è null, vuol dire che quando lo assegni qualcosa non va a buon fine.

Seguendo il tuo consiglio ho stampato e ho verificato che in effetti il riferimento a sfondo era null.
Non riuscivo a capire il perchè finchè non ho riesaminato tutto il file xml trovando che l'id del LinearLayout non era settato  :-o.
Non so come si sia potuto cancellare da solo  >:( ma risettandolo sono riuscito a sistemare l'errore  :D.

grazie per l'aiuto  :-)