2011-09-07 4 views
7

Il mio codice è:Android: Java: utilizzando una risorsa di stringa in un brindisi

public static void ToastMemoryShort (Context context) { 
    CharSequence text = getString(R.string.toast_memoryshort); //error here 
    Toast.makeText(context, text, Toast.LENGTH_LONG).show(); 
    return; 
    } 

ma sto ricevendo "non può fare un riferimento statico al metodo getString non statico (int) dal tipo di contesto "in Eclipse. Sto cercando di essere pronto per la localizzazione mia app (ottenendo tutte le stringhe codificati duri in risorse), in modo da dove ho:

getString(R.string.toast_memoryshort) 

ho avuto in precedenza una stringa hard coded che andava bene.

Non sono sicuro di cosa sta succedendo qui (Java noob). Qualcuno può illuminarmi per favore?

Molte grazie

Baz

risposta

2

Basta usare questo invece:

makeText (contesto Context, int resid, durata int) Fai uno standard brindisi che contiene solo una vista testuale con il testo di una risorsa.

Da http://developer.android.com/reference/android/widget/Toast.html

+0

Mille grazie, perfetto. – Barry

+0

In realtà, era una combinazione della tua risposta e di Rasel: Necessario il .show alla fine, non aveva bisogno di Rasel "" + prima dell'ID risorsa: Toast.makeText (contesto, R.string.toast_memoryshort, Toast.LENGTH_LONG) .mostrare(); quindi anche +1 a Rasel. Grazie molto. – Barry

+0

sì, ovviamente .show() è necessario :) –

16

Scelgo

public static void ToastMemoryShort (Context context) { 

     Toast.makeText(context, context.getString(R.string.toast_memoryshort), Toast.LENGTH_LONG).show(); 
     return; 
     } 
+0

Grazie Rasel, vedi sopra. – Barry

+0

Il motivo per cui questa risposta è così popolare è che l'utilizzo di 'getString', in primo luogo, suggerisce che la stringa stessa fosse necessaria per qualche ragione (var injection, formattazione, ecc.). Inoltre, risolve effettivamente l'eccezione in questione che è un valore reale. – tishma

2

Si potrebbe rendere il vostro brindisi più generico come questo:

public void toast(String msg){ 
    Context context = getApplicationContext(); 
    CharSequence text = msg; 
    int duration = Toast.LENGTH_SHORT; 

    Toast toast = Toast.makeText(context, text, duration); 
    toast.show(); 
} 

Poi basta chiamare quando si ha bisogno in questo modo:

toast("My message hardcoded"); 

o utilizzando strngs.xml così:

toast(this.getString(R.string.toast_memoryshort)); 
0

Si dovrebbe cambiare

CharSequence text = getString(R.string.toast_memoryshort); //error here 

per:

CharSequence text = context.getString(R.string.toast_memoryshort); 

La funzione getString è implementata in Context#getString(int)