2010-09-09 14 views
16

To będzie trochę kiepskie pytanie. Mam następujący kod:Android :: findViewByID - jak mogę uzyskać widok TextView za pośrednictwem odbiornika innego elementu 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 ? 

} 
} 

Każda pomoc jest doceniana.

Odpowiedz

24

Można spróbować to:

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

wykorzystanie zależy od układu. Jego możliwe, że rodzic Twojego przycisku nie jest rodzicem swojej TextView więc należy być ostrożnym ...

+0

Dokładnie. Zobacz parent = (View) v.getParent() - Tak napisałem - .getParent() zwraca obiekt ViewParent. Mimo to tego właśnie szukałem. Dzięki. – George

+0

bardziej niezawodnym sposobem byłoby nadanie elementowi katalogu głównego identyfikatora i wykonanie 'findViewById()' w twoim 'onCreate()'. Dzięki temu masz pełny łatwy dostęp do swojego układu i wszystkich widoków w środku. Tak więc Rahul podał poprawną odpowiedź ... po prostu użyj elementu głównego zamiast widoku tekstowego. – WarrenFaith

0

EDYTOWANIE Nie sądzę, że będzie to możliwe. Widok V ma tylko przyciski zobaczyć w nim ....

Poznacie jeśli typecast samo

class ButtonListener implements android.view.View.OnClickListener 
    { 

    public void onClick(View v) 
    { 

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

// Jednak u można ustawić test tutaj ue TextView txt.setText ("zmień tekst");

 } 
    } 

nie rozumieją właściwie pytanie. Ale jeśli chcesz po prostu dostać się z tekstu ur TextView można spróbować jak to

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

Zobacz, mam przycisk, a kiedy go klikam, chciałbym zmienić tekst w TextView. Więc moje pytanie brzmi: "Czy jest sposób, aby to zrobić, gdy tylko kodowanie w metodzie onClick?" Powiedziałem, że byłoby to kulawe pytanie ... Wyobraź sobie, że mam tylko informacje (Zobacz v) i chciałbym współdziałać z elementem interfejsu użytkownika w układzie. Czy mogę uzyskać wszystkie elementy interfejsu użytkownika w układzie, jeśli mam tylko odniesienie do jednego z nich? – George

+0

W twoim przypadku nie sądzę, że byłoby to możliwe. Jeśli otrzymujesz widok układu, prawdopodobnie możesz uzyskać dzieci z niego w jednym przypadku, to będzie tylko przycisk. Sprawdź mój aktualny wpis – 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(...); 
     } 
    } 
} 

muszę ustawić widoczny element z tego samego rodzica, więc użyłem tego kodu :) i to pracował

+0

To działało dla widoku w oknie dialogowym, podczas gdy użycie funkcji getParent() nie działało. – Noumenon

Powiązane problemy