2016-07-21 6 views
1
toggle1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      try 
      { 
       String msg =""; 
       if (isChecked) { 
        // The toggle is enabled 

        //msg = "Hello " + String.valueOf(!isChecked); 
        msg = "1"; 


       } else { 
        // The toggle is disabled 
        //msg = "Hello " + String.valueOf(!isChecked); 
        msg = "1"; 
       } 
       msg += "\n"; 
       outputStream.write(msg.getBytes()); 

      } 
      catch (IOException ex) { } 
      catch (NullPointerException ex) { } 



     } 
    }); 

위의 코드를 고려하십시오. 이제 1 스위치가 있습니다.이 코드 스 니펫으로 충분합니다. 그러나 4 스위치가있는 경우이 코드 스 니펫을 4 번 반복하십시오. 그래서 이것은 중복되었습니다. 각 스위치에 대해 toggl1 -> msg = "1"; toggl2 -> msg = "2"; 그냥 각 장소를 변경합니다.안드로이드 스위치 setOnCheckedChangeListener DRY 원리를 적용하여 객체를 전달하는 메소드

내가 DRY 원칙을 준수 할 수 있도록 내가 setOnCheckedChangeListener에 개체를 전달할 수있는 방법?

+0

원래의 코드를 확장 한 자체 OnCheckedChangListener를 만들고 코드를 공유하면 생성자 – Chol

+0

@Chol로 해당 객체를 전달합니다. 배울 점이 있습니다. 그래, 나는 만들려고 노력했다. 그러나 CompoundButton 클래스에는 Context가 필요합니다. –

답변

1

당신은 View의 태그를 사용하여이

CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() { 

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     try { 
      String msg =""; 
      if (isChecked) { 
       // The toggle is enabled 

       //msg = "Hello " + String.valueOf(!isChecked); 
       msg = buttonView.getTag().toString() 


      } else { 
       // The toggle is disabled 
       //msg = "Hello " + String.valueOf(!isChecked); 
       msg = buttonView.getTag().toString() 
      } 
      msg += "\n"; 
      outputStream.write(msg.getBytes()); 

     } catch (IOException ex) { 

     } 
     catch (NullPointerException ex) { 

     } 
    } 
}; 

toggle1.setTag("1"); 
toggle2.setTag("2"); 
toggle3.setTag("3"); 

toggle1.setOnCheckedChangeListener(listener); 
toggle2.setOnCheckedChangeListener(listener); 
toggle3.setOnCheckedChangeListener(listener); 

처럼 나중에 검색 할 수있는 buttonViewonCheckChanged에 의해 항상

+0

}); 내가 일치 할 수 없습니다 ( –

+0

업데이트. 잊어 버림) ')' – 0xDEADC0DE

+0

오, 전 U 전에 해결했습니다 : –

1

가 작성하여 토글 변수 중 하나입니다 당신은 토글 스위치이며, 통과 사용자 정의 검사 리스너 :

private class customChecked implements CompoundButton.OnCheckedChangeListener { 

    String msg; 
    public customChecked(String mMsg){ 
     this.msg= mMsg; 
    } 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     myString = msg; 
    } 
} 

그런 다음 적용

+0

귀하의 솔루션은 더 투명합니다 –