2010-08-19 3 views
7

Die java.lang.RuntimeException lautet "Rufen Sie setOnClickListener nicht für eine AdapterView auf. Wahrscheinlich möchten Sie stattdessen setOnItemClickListener", aber das ist nicht korrekt. Ich benutze setOnItemClickListener, um etwas basierend auf der neuen Auswahl zu tun, aber ich muss auch einige Dinge tun, bevor der Benutzer die Auswahl ändert. Insbesondere sammle ich Daten für jede Auswahl, die in einer Datei gespeichert werden muss, bevor ich zu einer anderen Auswahl übergehe, da die andere Auswahl mit unterschiedlichen Datensätzen verknüpft ist. Gibt es eine Möglichkeit, setOnClickListener mit einem Android Spinner zu verwenden?Gibt es eine Möglichkeit, setOnClickListener mit einem Android Spinner zu verwenden?

spinner.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     // Do some stuff before the user changes the selection 
     ... 

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, 
      View view, int pos, long id) { 
      // Do some stuff based onItemSelected 
      ... 
+2

Eine neue (funktionierende) Lösung ist hier verfügbar: http://StackOverflow.com/a/8520801/406090 – OferR

Antwort

5

Sie den Klick-Listener auf der zugrunde liegende Ansicht (in der Regel ein Textview mit id: android.R.id.text1) gesetzt haben, um den Spinners. Dazu:

  • Erstellen Sie eine benutzerdefinierte Spinner
  • im Konstruktor (mit Attributen) erstellen, die Spinner, indem das Layout android.R.layout.simple_spinner_item
  • Führen Sie eine findViewById (android.R.id .text1) zu bekommen, das Textview
  • nun die OnClickListener auf die Textview gesetzt
+0

, so dass der onclicklistener im benutzerdefinierten Spinner definiert wäre? Soll ich auch einen onclicklistener auf dem Spinner selbst in der Aktivität definieren? – Namratha

+0

Ich habe versucht, den von Ihnen vorgeschlagenen Ansatz - der Klick ist registriert, aber das Dropdown-Menü funktioniert immer noch. Wie verhindere ich, dass das Dropdown-Menü funktioniert, da ich beim Klicken auf den Drehfeld auf einen anderen Bildschirm gehe. – Namratha

+0

Ich habe das mit Android: clickable = "false" – Namratha

7

Sie können replizieren, die ein Onclick-Ereignis mit OnTouch Ereignisse

this.spinner=(Spinner)findViewById(R.id.spinner); 
    this.spinner.setClickable(false); 
    this.spinner.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.v(TAG, "spinner touch"); 

      //replicating a click 
      if(event.getAction() == MotionEvent.ACTION_UP){ 
       v.playSoundEffect(android.view.SoundEffectConstants.CLICK); 
      } 
      return true; 
     } 
    }); 
+0

+1 für neue ideale – kemdo

+1

@ dcart1234 Sie müssen falsch zurückgeben sonst Spinner wird nicht geöffnet pop .. – Praveen

+0

Warum haben Sie spinner.setClickable (false) aufgerufen? – programmer

Verwandte Themen