Pregunta

Con este código, mi programa solo forzará (error)

***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();***
    }
});
}

el que tiene el * son la fuente de error

Función del programa: si el usuario hace clic confirma, su nombre se establecerá en r.string.nfoname que luego se usará en otro diseño a través de TextView x = settext (r.string.nfoname);

¿Fue útil?

Solución

No estoy seguro de que pueda guardar texto en el r.string. Esta es una clase generada que el compilador crea para ti. Se empaqueta con tu APK. Piense en los recursos como un medio de traducción y para presentar texto a la pantalla.

Creo que lo que querría hacer es guardar la entrada del usuario como un SharedPreference o en una base de datos.

Ver:Preferencias compartidas en los documentos de Android para un uso de ejemplo.

Otros consejos

Al menos en el caso de su alcance variable de Infoname es probable que su aplicación arroje un error. Infoname es una variable local para la función OnCreate (), no una variable de instancia para su clase, por lo que no se puede acceder mediante sus métodos OnClick () porque son parte de una clase anónima.

Otra cosa que preguntaría es ¿por qué marcaste Infoname como final? Sale del alcance cuando OnCreate () sale, por lo que si se cambia, puede ver quién lo cambió, ya que solo existe mientras el método se ejecuta.

No puede establecer valores en R.String.xxx porque todos estos valores serán constantes como un cosas de solo lectura. Si desea usar el valor de editar texto a otro diseño, use variables de clase o intent.putextra()

Al llegar al código fuente, veo esto

public View x = findViewById(R.string.nfoname);

¿Cómo puede encontrar una vista por R.String? Esto debería ser R.ID.

Final EditText Infoname = (EditText) FindViewById (r.id.infoname); ¿Por qué este edittext tiene que ser definitivo?

***x=(View) infoname.getText();***

Solo usas infoname.getText().toString() Obtendrá el valor de cadena del texto actual del EditText. Amigo, puedes hacer cosas simplemente.

public View x = findViewById(R.string.nfoname);

Esto no puede funcionar, ya que no solo estás tratando de encontrar un View usando un R.string ID de recursos, lo está haciendo antes setContenView(...) se llama en tu onCreate(...) método. Incluso si usaste un válido View ID de recursos como R.id.infoname después x estarán null Porque la vista del contenido aún no se ha inflado.

final EditText infoname=(EditText)findViewById(R.id.infoname);

Aparte del uso inútil de final Esto no debería causar problemas mientras R.id.infoname es en realidad la identificación de recursos de un EditText.

x=(View) infoname.getText();

No solo lo hará x ser null Pero llamando getText() en una EditText Devuelve un Editable que no es un View Tampoco es posible lanzarlo View. Incluso si usaste getText().toString() ¿Cuál es la forma correcta de obtener el texto de un EditText Todavía no sería posible lanzar un String a un View.

Además, en cuanto a esto ...

TextView x = settext (r.string.nfoname);

Tendría que ser ...

TextView x = (TextView) findViewById(<some id>);
x.setText(getString(R.string.nfoname));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top