spinner
을 만들고 있는데 OnItemSelectedListener
을 추가했습니다. 그러나 생성시 발생한다는 사실을 알았습니다. 무시하고 폐기하는 방법이 있는지 궁금합니다.작성시 OnItemSelectedListener가 실행되지 않음
내가 boolean
값을 사용할 수 있다는 것을 알았지 만, 그것은 "더러운"것입니다.
spinner
을 만들고 있는데 OnItemSelectedListener
을 추가했습니다. 그러나 생성시 발생한다는 사실을 알았습니다. 무시하고 폐기하는 방법이 있는지 궁금합니다.작성시 OnItemSelectedListener가 실행되지 않음
내가 boolean
값을 사용할 수 있다는 것을 알았지 만, 그것은 "더러운"것입니다.
다른 사람이이 질문을하는 경우이 문제를 해결하는 방법에 대한 좋은 아이디어가있는 답변이 여러 개있는 a related question I asked a while ago을 살펴볼 필요가 있습니다.
OnItemSelectedListener
에 대한 호출을 막아서는 안됩니다.
기본적으로 Android 스피너는 어댑터에서 반환 한 첫 번째 항목을 선택하므로 OnItemSelectedListener
이 호출되어 해당 항목에 대한 일부 작업이 트리거됩니다.
귀하의 회 전자 어댑터의 첫 번째 항목은 빈 항목이어야하며 귀하의 OnItemSelectedListener
은 해당 ID를 기반으로 해당 항목을 무시할 수 있다고 조언합니다.
여기 내 해결책이 있습니다.
Route Grade Spinner와 Route Checkbox 사이에 종속성이 있으므로 첫 번째 항목 선택 이벤트를 무시해야합니다.
내 모든 컨트롤은 이전 활동 방문을 기반으로 설정됩니다.
// Used to count the number of times the onItemSelected gets fired
private int mGradeSelectionCount = 0;
private void attachHandlers() {
OnItemSelectedListener gradeRangeSelectionMadeListener;
gradeRangeSelectionMadeListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapter, View view, int position, long id) {
// If the counter is 0 then we can assume that it is android firing the event
if (mGradeSelectionCount++ < 1) {
return;
}
if (mCmbGradeFrom.getSelectedItemPosition() == 0) {
// Uncheck the Route checkbox
mChkTypeRoute.setChecked(false);
} else {
// Check the Route checkbox
mChkTypeRoute.setChecked(true);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// Dont care, keep the same values as before
}
};
mCmbGradeFrom.setOnItemSelectedListener(gradeRangeSelectionMadeListener);
mChkTypeRoute.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked) {
mCmbGradeFrom.setSelection(0);
mCmbGradeTo.setSelection(0);
}
}
});
}
이 정보는 도움이 될 수 있습니다.
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
if(view!=null && view.getId()!=0){
//do your code here to avoid callback twice
}
}
작동하지 않음 :-( – sourcerebels
그럼 내가 나를 위해 좋은 해결책을 찾은 것 같아요, 제가 처음부터 마음에 그것을했다하지만 ... 가 나는 사용자 정의 래퍼 클래스 안드로이드 핸들러를 기반으로 한 그는 DoLater라고, 또한 사용자 정의 어댑터가 있습니다 리스너를 기반으로 복사 붙여 넣기하지만 당신은 아이디어를 얻을 것이다. 위험한 것은 어떻게 든 지연 500은 길어질 수 있고보기는 이미 파괴 될 수 있습니다 (사용자가 유선 물건을 빠르게하거나 휴대 전화가 느려지는 경우). DoLater는이 점을 고려하여 활동이 재개되지 않을 때 호출되지 않습니다. 그러나이 방법으로 OnItemSelectedListener는 생성시에 실행되지 않습니다.
public void onResume() {
super.onResume();
new DoLater(this, 500) {
public void run() {
new OnSpinnerSelectedAdapter(getBowSpinner()) {
protected void onItemSelected(int position) {
onBowSelected(position);
}
};
}
};
}
청취자와 관련된 다른 문제가 있습니다. OnItemSelected 메서드에서 비동기 작업을 시작한 다음 getLastNonConfigurationInstance를 회전하면 onRetainNonConfigurationInstance에 저장 한 작업에 대해 null이 반환됩니다. 하지만 코드를 oncreate에 넣으면 잘 작동 할 것입니다. – Maxrunner
당신은 우리에게 2 답을 알려주고 있다고 말하지 않았습니다. – cosmincalistru
@cosmincalistru : 링크를 수정했습니다. 당시 브라우저 URL에 붙여 넣기 한 내용을 복사했는데, 문제가 아니라 대답이라는 것을 깨닫지 못했습니다. 어쩌면 시간이 지나면 나 자신을 용서하게 될거야. –