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);

È stato utile?

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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top