2017-12-16 34 views
0

CustomAdapter에서 여러 스위치를 구현했습니다.Android, Listview 다중 스위치 문제

아래의 CustomAdapter 코드.

sche_swt = (Switch)convertView.findViewById(R.id.ctschedule); 
    loc_swt = (Switch)convertView.findViewById(R.id.ctlocation); 

    sche_swt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean is_checked) { 
      if (compoundButton.getId() == R.id.ctschedule) { 
       if (is_checked == true) { 
        contactItemList.get(position).setSchedule(true); 
       } else { 
        contactItemList.get(position).setSchedule(false); 
       } 
      } 
     } 
    }); 

    if (contactItemList.get(position).getScheduleInt() == 1) { 
     sche_swt.setChecked(true); 
    } 
    else 
     sche_swt.setChecked(false); 

    loc_swt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean is_checked) { 
      if (compoundButton.getId() == R.id.ctlocation) { 
       if (is_checked == true) { 
        contactItemList.get(position).setLocation(true); 
       } 
       else { 
        contactItemList.get(position).setLocation(false); 
       } 
      } 
     } 
    }); 

    if (contactItemList.get(position).getLocationInt() == 1) { 
     loc_swt.setChecked(true); 
    } 
    else 
     loc_swt.setChecked(false); 


    return convertView; 
} 

하나 개의 단일 라인은

name 
phone_number 
switch 1 | switch 2 

처럼 보인다 그리고 스위치

예를 들어

의 상태를 저장 : 등등

1 line = switch(false) | switch(true) 
2 line = switch(false) | switch(true) 
3 line = switch(true) | switch(false) 

을 ... 그리고. 내 응용 프로그램을 종료 한 후

는 다시 실행 목록보기 결과는

1 line = switch(true) | switch(false) 
2 line = switch(true) | switch(false) 
3 line = switch(true) | switch(false) 

어떤 문제처럼 보인다?

답변

0

리스너에서 position 변수를 사용하거나 setChecked 메소드를 호출 할 때 문제가 발생할 수 있습니다. 다음을 시도해보십시오, 나는 단지 일정 전환을 위해서 한 것이고, 위치 전환을 위해서도 똑같이하십시오.

sche_swt = (Switch)convertView.findViewById(R.id.ctschedule); 
loc_swt = (Switch)convertView.findViewById(R.id.ctlocation); 

// setting tag 
sche_swt.setTag(position) 
loc_swt.setTag(position) 

// you need to remove the listener because when you call setChecked() 
// it will invoke the listener unnecessarily and it might affect the 
// state of the view. 
sche_swt.setOnCheckedChangeListener(null); 
if (contactItemList.get(position).getScheduleInt() == 1) { 
    sche_swt.setChecked(true); 
} 
else 
    sche_swt.setChecked(false); 

sche_swt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton compoundButton, boolean is_checked) { 
     if (compoundButton.getId() == R.id.ctschedule) { 
      // using the tag to get the position. 
      int position = compoundButton.getTag(); 
      if (is_checked == true) { 
       contactItemList.get(position).setSchedule(true); 
      } else { 
       contactItemList.get(position).setSchedule(false); 
      } 
     } 
    } 
}); 


return convertView; 

당신이 태그가 무엇인지 모르는 경우

또는 내가 아니라 위치를 사용하는 이유는,이 https://stackoverflow.com/a/5291891/1749223 .I를 읽어 위의 수정 문제를 바랍니다.