Come memorizzare un numero/stringa in r.string.xx?
Domanda
Con questo codice, il mio programma Basta forzare Close (Errore)
***public View x = findViewById(R.string.nfoname);***
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.information);
//edittext
***final EditText infoname=(EditText)findViewById(R.id.infoname);***
//clear,confirm
Button clear = (Button)findViewById(R.id.buttonclear);
Button confirm = (Button)findViewById(R.id.buttonconfirm);
//clear button
clear.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
infoname.setText("");
}
});
//confirm button
confirm.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
***x=(View) infoname.getText();***
}
});
}
quello con il * sono la fonte di errore
Funzione del programma: se i clic dell'utente confermano, il suo nome verrà impostato su R.String.nfoname che verrà quindi utilizzato in un altro layout tramite TextView x = setText (R.String.nfoname);
Soluzione
Non sono sicuro di poter salvare il testo a R.String. Questa è una classe generata che il compilatore crea per te. Viene confezionato con il tuo APK. Pensa alle risorse come un mezzo di traduzione e per presentare il testo allo schermo.
Penso che quello che vorresti fare sia salvare l'input dell'utente come preferenza condivisa o in un database.
Vedere:Condivisoreferenze sui documenti Android per un utilizzo di esempio.
Altri suggerimenti
Almeno nel caso della tua amplizia di Infoname variabile sta probabilmente causando un errore dell'applicazione. Infoname è una variabile locale per la funzione OnCreate (), non una variabile di istanza per la tua classe, quindi non è possibile accedere ai metodi OnClick () perché fanno parte di una classe anonima.
Un'altra cosa che mi metterei in dubbio è perché hai segnato Infoname come finale? Viene fuori dall'ambito quando OnCreate () esce, quindi se viene cambiato, puoi vedere chi lo ha cambiato poiché esiste solo mentre il metodo sta eseguendo.
Non è possibile impostare i valori su R.string.xxx perché tutti questi valori saranno costanti molto simili a una roba solo a lettura. Se si desidera utilizzare il valore del testo di modifica per un altro layout utilizzare le variabili di classe o intent.putextra()
Venendo al tuo codice sorgente vedo questo
public View x = findViewById(R.string.nfoname);
Come si può trovare una vista da R.String? Questo dovrebbe essere R.ID.
Final EditText Infoname = (EditText) findViewById (R.ID.Infoname); Perché questo EditText deve essere definitivo?
***x=(View) infoname.getText();***
Tu usi solo infoname.getText().toString()
Otterrai il valore stringa del testo corrente di EditText. Amico, puoi fare cose semplicemente.
public View x = findViewById(R.string.nfoname);
Questo non può funzionare perché non solo stai cercando di trovare un View
usare un R.string
ID risorsa, lo stai prima facendo setContenView(...)
è chiamato nel tuo onCreate(...)
metodo. Anche se hai usato un valido View
ID risorsa come R.id.infoname
poi x
sarà null
Perché la vista del contenuto non è stata ancora gonfiata.
final EditText infoname=(EditText)findViewById(R.id.infoname);
A parte l'uso inutile di final
Questo non dovrebbe causare problemi finché R.id.infoname
è in realtà l'ID risorsa di un EditText
.
x=(View) infoname.getText();
Non solo lo farà x
essere null
Ma chiamando getText()
su un EditText
Restituisce un Editable
che non è un View
Né è possibile lanciarlo View
. Anche se hai usato getText().toString()
che è il modo corretto per ottenere il testo da un EditText
non sarebbe ancora possibile lanciare un String
a a View
.
Inoltre, per quanto riguarda questo ...
TextView x = setText (R.String.nfoname);
Dovrebbe essere ...
TextView x = (TextView) findViewById(<some id>);
x.setText(getString(R.string.nfoname));