2012-03-28 2 views
0

Gibt es eine Möglichkeit, einen Listener manuell aus Code aufzurufen?Android: Call-Listener manuell von Java-Code

Weitere Hintergrundinformationen: Ich verwende einen Spinner und einen DatePicker. Mit dem Spinner können Sie einen Grund wählen, zu Hause zu bleiben (vielleicht krank, vielleicht haben Sie Urlaub) und mit dem DatePicker können Sie das Datum wählen, wie lange Sie nicht zur Verfügung stehen. Mit diesen beiden Informationen baue ich eine Zeichenfolge für ein TextView auf und zeige die gleichen Daten kompakt an. Der Aufbauprozess für die Zeichenfolge wird von einigen Listenern festgelegt, die Änderungen an einem der beiden Steuerelemente erkennen und die neue Zeichenfolge erstellen und einrichten. Wenn ich das Programm starte und einige Daten von einem Server lese, wird die Zeichenfolge nicht erstellt (klar, weil sich nichts geändert hat und kein Listener aufgerufen wird).

Die Problemumgehung besteht darin, die Zeichenfolge in meiner eigenen onLoaddata()-Methode zu erstellen. Aber ich denke, es wäre eine sanftere Art, einen Hörer zu rufen, um die Saite für mich zu bauen. Ich kann auch einen Hörer "anrufen", wenn ich nur ein paar gefälschte .updateDate mache, aber ich denke nicht, dass es eine gute Idee ist, nutzlose Anrufe zu erstellen ...

Vielleicht hat jemand von euch einen guten Tipp für mich?

+0

Ihre eigene Methode, um Daten zu laden, ist die beste Option - der Code wäre klarer. –

+0

Natürlich wird der Code klarer, aber ich muss den gleichen Code noch einmal schreiben (und ich mag es nicht, den gleichen Code zweimal oder mehr zu schreiben, wenn es nicht notwendig ist), über den ich nicht diskutieren möchte Workarounds, weil sie ohne Probleme arbeiten, möchte ich wissen, ob es eine Möglichkeit gibt, den Hörer zu rufen! – sandkasten

+0

Sie müssen nicht den gleichen Code zweimal schreiben - verwenden Sie eine Methode, um Ihr TextView zu aktualisieren und es von jedem beliebigen Ort aus aufzurufen, egal ob der Callback des Hörers oder onCreate (..) –

Antwort

0

Verwenden Sie die folgenden Muster:

public class YourActivity extends Activity implements OnClickListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ... 

     // Some initialization here 
     findViewById(R.id.some_button).setOnClickListener(this); 

     ... 

     // Here you want to update your view 
     updateTextView(); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 

     case R.id.some_button: 
      // Here you also want to update your view 
      updateTextView(); 
      break; 

     ... 

     } 
    } 

    private void updateTextView() { 
     // Here you update your view 
     ... 
    } 
} 
+0

Danke für Ihre Arbeit, aber wie ich bereits erwähnt habe, suche ich nach einer Möglichkeit, den Hörer zu rufen. Ich weiß, dass ich einfach eine Methode in meiner Aktivität erstellen und sie als Listener bezeichnen kann, das ist auch ein Workaround. Ich möchte nicht über das "Warum" oder "Wie" auf einem anderen Weg sprechen. Ich suche nach einem Weg den Hörer zu rufen, ist das möglich oder nicht? Ich habe eine Methode wie 'update' vermisst, die den Hörer anruft. – sandkasten

+0

Ja, Sie können den Listener anrufen, was im obigen Muster "YourActivity" ist. ** Genau, 'YourActivity' = Listener. ** So können Sie sogar die' onClick (View) 'Callback-Methode dieses Listeners aufrufen. Aber was Sie versuchen, ist, die gleiche Callback-Methode ** indirekt ** aufzurufen: führen Sie einen Klick (updateDate in Ihrem Fall) programmgesteuert aus, nur um die Callback-Methode aufzurufen. Macht das Sinn, wenn Sie _dein nicht denken, dass es eine gute Idee ist, nutzlose Anrufe zu erstellen ..._? –

+0

* plonk * Heute ist nicht mein Tag ... Okay, ich verstehe es jetzt, oh man ... danke für deine Geduld =) – sandkasten