2013-02-25 23 views
11

setOnItemClickListener nie działa z Spinner. Tu jest mój kod ...setOnItemClickListener nie działa z Spinner

supplier.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, 
         long id) { 
        // TODO Auto-generated method stub 

        String msupplier=supplier.getSelectedItem().toString(); 
        Log.e("Selected item : ",msupplier); 

       } 
      }); 
+0

Czy możesz podać więcej kodu tej aktywności? –

+0

proszę dodać kod adaptera i xml przedmiotu do przedmiotu na pytanie: –

Odpowiedz

41

setOnItemClickListener nie współpracuje z turbinki. Spróbuj użyć tej metody:

setOnItemSelectedListener

Zmień swój kod jak następuje:

supplier.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       // TODO Auto-generated method stub 
       String msupplier=supplier.getSelectedItem().toString(); 

       Log.e("Selected item : ",msupplier); 
} 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 
+4

Problem z pokrętłem polega na tym, że otrzymujesz powiadomienie tylko wtedy, gdy zmieniłeś wybrany element, i nigdy, gdy kliknąłeś na ten sam przedmiot, a więc potrzeba zdarzenia itemClicked. –

0

myślę supplier w kodzie oznacza spinner, zastępują tej linii

String msupplier=supplier.getSelectedItem().toString(); 

z poniższej linii:

String msupplier= supplier.getItemAtPosition(position).toString(); 
1

Korzystanie getItemAtPosition:

supplier.getItemAtPosition(position).toString(); 
3

I mogą być schodzili Oczywiście, ale uważa się, że proponuję użyć OnItemSelectedListener który jest szerszy niż OnItemClickListener dla Spinners:

supplier.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
     long arg3) { 
     //do something here 
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     //optionally do something here 
    } 
}); 
+0

Dzięki Waqas .... – Sonu

1

Użyj tego

supplier.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
5

1. myślę, że należy sprawdzić plik XML, który zawiera tarczy. Upewnij się, że nie ustawiono android:clickable = "false".

2. proszę sprawdzić zasilacz pokrętła i upewnić się w swoim sposobie getView(int position, View convertView, ViewGroup parent), nie ustawiono żadnej zwrotnej widget kliknij zdarzenie, takie jak Button, Imageview, TextView

3

OnItemSelectedListener() służy innemu celowi niż jednym kliknięciem słuchacz. Co najważniejsze, nie uruchamia się, jeśli ponownie klikniesz na aktualnie wybrany element. W niektórych przypadkach może to nie stanowić problemu, ale w innych przypadkach może tak być. Tak więc prawdziwą odpowiedzią nie jest mówienie ludziom, aby używali innego i prawdopodobnie nieodpowiedniego słuchacza, ale aby rozwiązać pierwotny problem. :-)

szczęście możemy umieścić kliknij słuchacza na adapterze zamiast:

public class SpinnerClickAdapter extends BaseAdapter implements SpinnerAdapter { 
    protected OnItemClickListener listener; 

    public SpinnerClickAdapter(Context context, ..., OnItemClickListener listener) { 
    super(); 

    this.listener = listener; 
    } 

    @Override 
    public View getDropDownView(final int position, View convertView, final ViewGroup parent) { 
    if (convertView == null) 
     convertView = LayoutInflater.from(context).inflate(R.layout.yourlayout, false); 

    convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     if (listener != null) 
      listener.onItemClick((AdapterView<?>) parent, v, position, getItemId(position)); 
     } 
    }); 


    // ... 

    return convertView; 
    } 
} 

i wtedy możemy używać go jak zwykle, z tą tylko różnicą, nie ustawiając go na turbinki ale na zamiast tego adapter:

Spinner spinner = (Spinner) findViewById(R.id.yourspinner); 
SpinnerClickAdapter spinnerAdapter = new SpinnerClickAdapter(context, ..., new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    // TODO 
    } 
}); 
spinner.setAdapter(spinnerAdapter); 
+0

możesz podać kompletny przykład działania. – Noman

+0

cześć, dobra robota, ale jak zwijać spinner po wybraniu pozycji? –

0

Mam do czynienia z tymi problemami. setOnItemClickListener nie działa z pokrętłem. Moje rozwiązanie jest następujące:

mSpinnerYears.setAdapter(adapter); 
    mSpinnerYears.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      Logger.d(new StringBuilder(2).append("TAG:").append(TAG).toString(), 
        new StringBuilder(3).append("click pos = ").append(position).append(
          mSpinnerYears.getItemAtPosition(position).toString()).toString()); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 
Powiązane problemy