2016-03-18 12 views
1

Ich entwickle eine Android-Anwendung, die ich habe eine Klasse A. Die Klasse A hat einen Spinner, und es gibt eine B-Klasse, die die Spinner onItemSelected(), B implements OnItemSelectedListener und B öffentlich ist. Ich möchte eine Funktion in A aufrufen, wenn ein neueres Element ausgewählt hat. Wenn also das Element first ausgewählt wurde und ich es in second ändere, dann möchte ich eine Funktion aus der Klasse A aufrufen.
Ich möchte immer die gleiche Funktion A aufrufen. Es aktualisiert eine Liste.
Wie kann ich das tun?
Es gibt die Klasse A 's Spinner, die in A nennen onCreate s:So rufen Sie eine Funktion bei jeder Auswahl in Spinner

public void addListenerOnSpinnerItemSelection() { 
    pspinner = (Spinner) findViewById(R.id.spinner1); 
    pspinner.setOnItemSelectedListener(new B()); 
} 

Und die B-Klasse:

public class B implements OnItemSelectedListener { 
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){ 
     Toast.makeText(parent.getContext(), 
      "The selected place: " + parent.getItemAtPosition(pos).toString(), 
      Toast.LENGTH_SHORT).show(); 
      A.refresh(); //I think I should call A's function like that but 
         // Android Studio tells meg that refresh() must be static 
    } 
} 

Sollte ich die A ‚s-Funktion in addListenerOnSpinnerItemSelection() nennen? Oder in BonItemSelected? Aber wie?
Leider ist es nicht so oben arbeiten. Wie kann ich A's Funktion ohne make refresh() static aufrufen? Der Spinner bekommt seine Elemente aus einem XML.

Antwort

-1

Sie könnten eine if/else-Anweisung oder einen Schalter in Ihrem onItemSelectedListener verwenden. In Ihrem onItemSelectedListener, versuchen Sie dies:

String s = parent.getSelectedItem().toString(); 

if(s == "1"){ 
    callFunctionHere(); 
} 
else if(s == "2"){ 
    anotherFunction(); 
} 

Inspiriert von this SO

Frage
+0

Oh sorry @Steve vielleicht vergesse ich zu erwähnen, dass ich immer die gleiche Funktion bei jeder ausgewählten Änderung aufrufen möchte. Aber wie nennt man A's Funktion in B? : O 'a.function()'? –

+0

Ja, Sie würden einfach a.function() aufrufen; an jeder Position –

+0

Dies ist nicht der richtige Weg, [Strings in Java zu vergleichen] (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – codeMagic

1

bei kleinen Anzahl von Indizes können Sie diese verwenden

public void onClick(View v) { 
     startActivity(new Intent(UserLogin.this, ResetEmail.class)); 
    } 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
    { 
     if (parent.getSelectedItemPosition() == 0) 
     { 
      someFunction(); 
     } 
     else if (parent.getSelectedItemPosition() == 1) 
     { 
      someFunction(); 
     } 
     else if (parent.getSelectedItemPosition() == 2) 
     { 
      someFunction(); 
     } 
    } 

viel Glück.