2017-04-02 4 views
-2

스위치가 있습니다. 그것은 파일사용자가 설정 한 스위치로 프로그래밍 방식으로 설정된 스위치의 상태 변경을 어떻게 구별 할 수 있습니까?

이제

처음 가정을 삭제 Yes/No 옵션에 AlertDialog를 (download)/(locate locally)/(cancel the dialog)

2.Turn를 OFF 수행하면 표시 할 Download/locate/cancel 옵션이 ON을 보여줍니다이 1.에 AlertDialog처럼 작동 스위치 상태입니다 OFF. 이제 ON으로 설정하면 Listener는 OnChecked를 true로 등록합니다. 다음으로, 대화 상자 취소를 누르면 OnChecked는 파일을 찾거나 다운로드하지 않아 false로 설정됩니다. 이제이 변경은 프로그래밍 방식으로 설정되었지만 리스너가 감지합니다. Switch 상태를 나누는 방법이 필요합니다. 사용자 및 프로그램에 의한 변경.

내 수신기는 OnCheckedChangeListener입니다.

임시 해결책이나 불완전한 해결책을 온라인으로 가지고있는 비슷한 질문이 있다는 것을 알고 있습니다.

EDIT : 내 기본 목표를 해결하기 위해 질문의 전체 구조를 편집하고 변경했습니다. 이 편집 시점까지 답변이 없기 때문에 문제가되어서는 안됩니다.

+0

최소 타겟은 무엇입니까? – Opiatefuchs

+0

minSdkVersion 19 targetSdkVersion 25. 그러나 이것이 사용자 정의 스위치 및 인플레이션 오류와 어떻게 관련되어 있습니까 –

+0

API14에 추가 되었기 때문에 묻습니다 ... – Opiatefuchs

답변

0

이 문제에 대한 온라인 답변이 여러 개 있습니다. 그들은 SwitchCompat, CompundButton 등을 확장하는 커스텀 스위치 작성을 포함합니다. SilentlySetChecked 방법으로.

OnCheckedChangeListener 대신 OnClickListener를 구현하면 경고 대화 상자 문제가 재귀되지 않습니다. 하지만이 수신기에서 스 와이프 변경 사항을 감지 할 수 없습니다.

간단하게, 우리는 재귀 문제없이 클릭/스 와이프하여 수행 상태 변화를 감지해야합니다

CompoundButton.OnCheckedChangeListener downloadButtonListener = new CompoundButton.OnCheckedChangeListener() { 
 
@Override 
 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
 
if (holder.downloadSwitch.isPressed() & isChecked) { 
 
//if switch is turned on by click/swipe 
 
} 
 
else if(holder.downloadSwitch.isPressed() & !isChecked{ 
 
//if switch is turned on by click/swipe 
 
} 
 
} 
 
});

이 문제를 해결하는 간단한 충분히 솔루션입니다. 그러나 부분적으로 here을 제외하고는 결코 검색을하지 않았습니다. 제가 누락 된 더 나은 해결책이 있다면 알려주십시오.

참고 : 편집 된 질문에 대답하기 때문에 해결책으로 게시했습니다. 나는 해결책으로 나의 자신을 받아들이 기 전에 더 나은 응답을위한 며칠을 기다릴 것이다.