2013-05-08 14 views
16

native speakerem, więc przykro mi z powodu moich złych angielskich umiejętności.Dlaczego metoda onNothingSelected jest wymagana w słuchaczu typu spinner?

Studiuję Androida od 5 tygodni. Próbowałem zaimplementować spinner, a mój mentor zapytał, dlaczego potrzebna jest metoda onNothingSelected. Nie miałem nic do powiedzenia.

Dlaczego więc potrzebuję tej metody? Czy możesz odpowiedzieć?

Następujący kod to mój spinner. Działa prawidłowo, co zamierzałem.

public class SpinnerViewPractice extends Activity { 
private Spinner spinner; 
private String spinner_value = ""; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.spinnerviewpractice); 

    spinner = (Spinner)findViewById(R.id.spinner1); 

    String[] str = {"","good", "dislike", "like", "hate", "moderate"}; 
    spinner.setPrompt("Set Text"); 
    ArrayAdapter<String> list = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, str); 
    spinner.setAdapter(list); 
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      TextView tv = (TextView)arg1; 
      spinner_value = tv.getText().toString(); 
      if(spinner_value.length() == 0) 
      { 
       spinner_value = "Nothing";     
      } 
      Toast.makeText(SpinnerViewPractice.this, spinner_value, Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      Toast.makeText(SpinnerViewPractice.this, "NothingSelected", Toast.LENGTH_SHORT).show(); 
     }   
    }); 
} 

}

+0

"onNothingSelected" to metoda wywołania zwrotnego, która ma zostać wywołana, gdy zaznaczenie zniknie z tego widoku. – DroidBender

+0

O ile widzę, potrzebujesz go, by pokazać toast? Więc informujesz użytkownika, że ​​nie wybrał nic. Po prostu spróbuj sam, skomentuj te linie kodu i sprawdź, jak działa twoja aplikacja. – sandkasten

Odpowiedz

4

Od doc here.

onNothingSelected to metoda oddzwaniania, która zostanie wywołana, gdy wybór zniknie z widoku . Wybór może zniknąć, na przykład po uaktywnieniu dotyku lub po wyczerpaniu karty.

Myślę, że to prawie odpowiedź na twoje pytanie. Więc jeśli twoja przędzarka zniknie z innego powodu, poza wybraniem pozycji, zostanie wywołana onNothingSelected. Tak jak sama nazwa mówi, jest to potrzebne, aby dowiedzieć się, kiedy nic nie jest zaznaczone

+1

Dokumenty wydają się błędne, wywołanie zwrotne nie jest wywoływane przy zwolnieniu, patrz tutaj http://stackoverflow.com/a/3474463/819355 – marmor

+1

Po prostu nie zachowuje się w ten sposób, chociaż powinno. –

6

Jako dokumentacja opisuje: metoda

oddzwaniania się powoływać, gdy wybór znika z tym poglądem. Wybór może zniknąć, na przykład po uaktywnieniu dotyku lub po opróżnieniu adaptera.

Oznacza to, że metoda jest wywoływana za każdym razem, gdy aktualnie wybrany element zostanie usunięty z listy dostępnych elementów. Jak opisuje dokument, może się to zdarzyć w różnych okolicznościach, ale ogólnie, jeśli adapter jest zmodyfikowany w taki sposób, że aktualnie wybrany element nie jest już dostępny, metoda zostanie wywołana.

Ta metoda może być używana w celu ustalenia, który element zostanie wybrany, ponieważ poprzedni element nie jest już dostępny. Zamiast pozwalać spinnerowi automatycznie wybrać następny element na liście.

+1

Skąd wiadomo, który element został odznaczony, jeśli jedynym parametrem jest "AdapterView"? Czy jesteś pewien, że to jest kiedy ta funkcja jest wywoływana? –

+0

Spinner nie może powiedzieć, który element został odznaczony, ponieważ nie jest już w adapterze. Jeśli chcesz się dowiedzieć, który element lub indeks został wcześniej wybrany, musisz zapisać te informacje samodzielnie. – TheIT

Powiązane problemy