2011-07-16 21 views
10

Quiero cambiar el de un TextView presionando un Button, pero no entiendo cómo hacerlo correctamente.Cómo cambiar el texto de un TextView presionando un botón

Esto es parte de mi diseño:

<TextView android:id="@+id/counter" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Text" /> 
<Button android:id="@+id/button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Change text!" /> 

Y esta es mi actividad:

public class Click extends Activity { 
    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     final Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 
       // ??? 
      } 
     }); 
    } 
} 

¿Qué debería poner dentro onClick() método?

Respuesta

12
  1. Encuentra el TextView por id
  2. Cambiar el texto invocando yourTextView.setText("New text");

Consulte findViewByIdsetText y métodos.

+0

Una t importante hing: el campo se actualiza solo cuando sales del bloque onClick, no puedes actualizar el mismo campo dos veces. – onizukaek

3
TextView tv = (TextView) v; 
tv.setText("My new text"); 

Editar: Aquí es su manejador:

button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //TextView tv = (TextView) v; //code corrected 
      TextView tv= (TextView) findViewById(R.id.counter); 
      tv.setText("My new text"); 
     } 
}); 

vista de Vista de Texto = (TextView) findViewById (R.id.counter);

+0

Espero que sepas que esto es totalmente incorrecto. El parámetro 'v' en el método' onClick() 'es el clic en la vista. Ahora, si hace clic en un "Botón" con su código, todo lo que sucede es que el texto de su "Botón" cambia. –

+0

¡Oh! Button y TextView son diferentes. Sí, es mi error. Voy a eliminar mi respuesta. – Vikas

10
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class Click extends Activity { 
int i=0; 
    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     final TextView mTextView = (TextView) findViewById(R.id.counter) 
     mTextView.setText("hello "+i); 

     final Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 
       i=i+1; 
       mTextView.setText("hello "+i); 
      } 
     }); 
    } 
} 

Hope esto sirva a sus necesidades

+0

Gracias. Este código funciona – Roman

+0

bienvenido ... ¿qué pasa el voto? Hombre –

+0

Intenté esto, y modifico algo como esto 'mTextView.setText (Integer.toString (i));', y funcionó. Gracias. +1 – InnocentKiller

0

Puede hacerlo con el método ("nada") setText.

0

En onclick, tomar el objeto de la Vista de Texto y establecer el texto deseado, así:

tvOBJECT.setText("your text"); 
0

Java solamente hay una versión XML

Para hacer las cosas más explícito:

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class Main extends Activity { 
    private int i; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.i = 0; 

     final TextView tv = new TextView(this); 
     tv.setText(String.format("%d", this.i)); 

     final Button button = new Button(this); 
     button.setText("click me"); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Main.this.i++; 
       tv.setText(String.format("%d", Main.this.i)); 
      } 
     }); 

     final LinearLayout linearLayout = new LinearLayout(this); 
     linearLayout.addView(button); 
     linearLayout.addView(tv); 
     this.setContentView(linearLayout); 
    } 
} 

Probado en Android 22.

Cuestiones relacionadas