선택한 항목이 변경 될 때 Spinner의 이벤트 리스너를 어떻게 설정할 수 있습니까?
기본적으로 내가하려는 것은 이와 비슷한 것입니다.
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
답변
이전 답변 중 일부가 올바르지 않습니다. 다른 위젯과 뷰에서 작동하지만 Spinner 위젯에 대한 설명서에는 다음과 같이 명확하게 나와 있습니다.
스피너는 항목 클릭 이벤트를 지원하지 않습니다. 이 메소드를 호출하면 예외가 발생합니다.
더 나은 사용 OnItemSelectedListener () 대신 :
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// your code here
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
이것은 나를 위해 작동합니다.
뷰가 빌드 될 때 onItemSelected 메소드도 호출되므로 onCreate()
메소드 호출에 넣는 것을 고려할 수 있습니다 .
답변
Spinner spnLocale = (Spinner)findViewById(R.id.spnLocale);
spnLocale.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
// Your code here
}
public void onNothingSelected(AdapterView<?> adapterView) {
return;
}
});
참고 : 한 가지만 기억하십시오.
스피너 OnItemSelectedListener
이벤트는 두 번 실행됩니다.
- 스피너 초기화
- 사용자가 수동으로 선택
플래그 변수를 사용하여이 두 가지를 구별하십시오.
답변
AdapterView.OnItemSelectedListener
활동에서 클래스를 구현할 수 있습니다 .
그런 다음 아래 줄을 사용하십시오. onCreate()
Spinner spin = (Spinner) findViewById(R.id.spinner);
spin.setOnItemSelectedListener(this);
그런 다음이 두 가지 방법을 재정의하십시오.
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
selection.setText(items[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
selection.setText("");
}
답변
https://stackoverflow.com/q/1714426/811625
간단한 확인으로 OnItemSelectedListener ()가 호출되는 것을 피할 수 있습니다. 현재 선택 색인을 정수 변수에 저장하고 무엇을하기 전에 onItemSelected (..) 내에서 확인하십시오.
예 :
Spinner spnLocale;
spnLocale = (Spinner)findViewById(R.id.spnLocale);
int iCurrentSelection = spnLocale.getSelectedItemPosition();
spnLocale.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if (iCurrentSelection != i){
// Your code here
}
iCurrentSelection = i;
}
public void onNothingSelected(AdapterView<?> adapterView) {
return;
}
});
원인의는 iCurrentSelection
이 작업을 수행하려면 객체의 범위에 있어야합니다!
답변
스피너 이름을 찾고 id를 찾은 다음이 메소드를 구현하십시오.
spinnername.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// your code here
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
답변
onCreate 또는 onStart에서 OnItemSelectedListener를 설정하는 것은 중요하지 않습니다. Activity 생성 또는 시작 중 (각각) 여전히 호출됩니다.
따라서 onCreate에서 설정할 수 있습니다 (onStart에서는 아닙니다!).
첫 번째 초기화를 파악하려면 플래그를 추가하십시오.
private Spinner mSpinner;
private boolean mSpinnerInitialized;
그런 다음 onCreate (또는 onCreateView)에서 다음을 수행하십시오.
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if (!mSpinnerInitialized) {
mSpinnerInitialized = true;
return;
}
// do stuff
}
public void onNothingSelected(AdapterView<?> adapterView) {
return;
}
});
답변
스피너 위젯의 문서에 따르면
스피너는 항목 클릭 이벤트를 지원하지 않습니다.
setOnItemSelectedListener
문제를 해결 하는 데 사용해야 합니다.