2010-09-09 6 views
16

Das wird eine etwas lahme Frage sein. Ich habe folgenden Code:Android :: findViewByID - Wie kann ich View eines TextView über einen Listener eines anderen UI-Elements erhalten?

.............. 
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 ? 

} 
} 

Jede Hilfe wird geschätzt.

Antwort

24

Sie konnten dieses versuchen:

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

die Nutzung auf dem Layout abhängt. Seine möglich ist, dass die Eltern Ihrer Taste ist nicht die Eltern Ihrer Textview so vorsichtig sein ...

+0

Mein Punkt genau. View parent = (View) v.getParent() - Ich habe es so geschrieben - .getParent() gibt ein ViewParent-Objekt zurück. Trotzdem war genau das, wonach ich suchte. Vielen Dank. – George

+0

Der robustere Weg wäre, Ihrem root-Layout-Element eine ID zu geben und eine 'findViewById()' in Ihrem 'onCreate()' zu machen. So haben Sie vollen Zugriff auf Ihr Layout und alle Ansichten im Inneren. Also hat Rahul die richtige Antwort gegeben ... benutze einfach das root-Element anstelle der textview – WarrenFaith

0

EDIT Ich denke nicht, dass es möglich sein wird. Die Ansicht V hat nur die Tasten darin sehen ....

Sie wissen, wenn Sie typisieren die gleiche

class ButtonListener implements android.view.View.OnClickListener 
    { 

    public void onClick(View v) 
    { 

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

// Jedoch kann u den Test hier für ue Textview txt.setText gesetzt ("Text ändern");

 } 
    } 

ich richtig verstehe Ihre Frage nicht. Aber wenn Sie nur den Text aus ur Textview bekommen möchten, können Sie versuchen, wie diese

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

Siehe, ich habe eine Schaltfläche, und wenn ich darauf klicke, möchte ich den Text eines TextView ändern. Also meine Frage ist "Gibt es eine Möglichkeit, das zu tun, wenn nur in der OnClick-Methode zu kodieren?" Ich habe gesagt, es wäre eine lahme Frage ... Stellen Sie sich vor, ich habe nur die (View v) Informationen und ich möchte mit einem UI-Element im Layout interagieren. Kann ich alle UI-Elemente in einem Layout erhalten, wenn ich nur einen Verweis auf einen habe? – George

+0

In Ihrem Fall glaube ich nicht, dass es möglich wäre. Wenn Sie eine Layout-Ansicht bekommen, können Sie die Kinder daraus entnehmen, dass es nur eine Schaltfläche ist. Überprüfen Sie meine aktualisierte Post – 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(...); 
     } 
    } 
} 

Ich muß aus der gleichen Mutter sichtbar ein Element setzen, so habe ich diesen Code :) und es

+0

Dies funktionierte für eine Ansicht in einem Dialog, während getParent() nicht verwendet wurde. – Noumenon

Verwandte Themen