2010-09-09 6 views
16

Esta va a ser una pregunta poco convincente. Tengo el siguiente código:Android :: findViewByID: ¿cómo puedo obtener la Vista de un TextView a través de un Oyente de otro elemento de UI?

.............. 
public void onCreate (Bundle bundle) 
{ 
    super.onCreate(bundle); 
    this.setContentView(R.layout.main2); 
    Button bnt = (Button) this.findViewById(R.id.browser); 
    bnt.setOnClickListener(new ButtonListener()); 

} 
.............. 
class ButtonListener implements android.view.View.OnClickListener 
{ 

public void onClick(View v) 
{ 
    // I have a TextView in my xml layout file. 
    // I'd like to get it and change my text when I click this button. 
    // But I can't get it (the TextView) unless I make it as a value of a static member of this class and pass it to the constructor. 
    //I believe I am missing a big point here, so i'd be very thankful if you could explain how this is meant to be done ? 

} 
} 

Se agradece cualquier ayuda.

Respuesta

24

Usted podría intentar esto:

class ButtonListener implements android.view.View.OnClickListener { 
    public void onClick(View v) { 
     View parent = (View)v.getParent(); 
     if (parent != null) { 
      TextView txtView = parent.findViewById(R.id.mytextview); 
      txtView.setText(...); 
     } 
    } 
} 

el uso depende de su diseño. Su posible, que el padre de su botón no es el padre de su Vista de Texto así que ten cuidado ...

+0

Mi punto exactamente. Ver parent = (Ver) v.getParent() - Lo escribí de esta manera: --getParent() devuelve un objeto ViewParent. Aún así, esto era exactamente lo que estaba buscando. Gracias. – George

+0

la forma más robusta sería darle a su elemento de diseño raíz una ID y hacer un 'findViewById()' en su 'onCreate()'. Por lo tanto, tiene acceso fácil y completo a su diseño y a todas las vistas internas. Entonces, Rahul ha dado la respuesta correcta ... simplemente use el elemento raíz en lugar de la vista de texto – WarrenFaith

0

EDIT No creo que sea posible. La vista V solamente tiene los botones de vista en ella ....

Usted sabrá si el mismo encasillado

class ButtonListener implements android.view.View.OnClickListener 
    { 

    public void onClick(View v) 
    { 

     Button vg=(Button)v; 
     Log.e("", "views are "+vg.getText()); 

// Sin embargo u puede establecer la prueba aquí para TextView ue txt.setText ("cambiar texto");

 } 
    } 

yo no entiendo su pregunta correctamente. Pero si lo que desea es obtener el texto de Ur TextView se puede tratar como esto

TextView txt; 

public void onCreate (Bundle bundle) 
{ 
    super.onCreate(bundle); 
    this.setContentView(R.layout.main2); 
    Button bnt = (Button) this.findViewById(R.id.browser); 
    txt=(TextView)this.findViewById(R.id.urtextview); 
    bnt.setOnClickListener(new ButtonListener()); 

} 
.............. 
class ButtonListener implements android.view.View.OnClickListener 
{ 

public void onClick(View v) 
{ 
    // I have a TextView in my xml layout file. 
    // I'd like to get it and change my text when I click this button. 
    // But I can't get it (the TextView) unless I make it as a value of a static member of this class and pass it to the constructor. 
    //I believe I am missing a big point here, so i'd be very thankful if you could explain how this is meant to be done ? 
//I think this should get u the string... 
System.out.println("text is "+txt.getText().toString()); 

} 
} 
+0

Ver, tengo un botón, y cuando hago clic en él, me gustaría cambiar el texto de un TextView. Entonces mi pregunta es "¿Hay alguna manera de hacerlo cuando solo codifica en el método onClick?" Dije que sería una pregunta difícil ... Imagine que solo tengo la información (Ver v) y me gustaría interactuar con un elemento de la interfaz de usuario en el diseño. ¿Puedo obtener todos los elementos de la interfaz de usuario en un diseño si solo tengo una referencia a uno de ellos? – George

+0

En tu caso, no creo que sea posible. Si está obteniendo una vista de diseños probablemente pueda sacar a los niños de ella en su caso, será solo un botón. Compruebe mi publicación actualizada – DeRagan

6
class ButtonListener implements android.view.View.OnClickListener { 
    public void onClick(View v) { 
     View p = (View) view.getRootView();   
     if (p != null) { 
      TextView txtView = (TextView) p.findViewById(R.id.mytextview); 
      txtView.setText(...); 
     } 
    } 
} 

necesito fijar un elemento visible del mismo padre, así que utiliza este código :) y se trabajado

+0

Esto funcionó para una vista en un diálogo, mientras que el uso de getParent() no lo hizo. – Noumenon

Cuestiones relacionadas