2012-03-15 4 views
0

기본적으로 AsyncTask를 확장하는 개인 클래스를 통해 웹 서비스를 호출하는 데 사용하는 PreferenceActivity가 있습니다. 환경 설정이 변경 될 때마다 나는 어떤 환경 설정이 변경되었는지를 결정하는 "거대한" "스위치 케이스"를 가지고 그에 따라 전화를합니다.PreferenceActivity : using onSharedPreferenceChanged()

  1. 이것은 "바보"방법처럼 보인다 내 문제를 해결하기 위해 :

    지금 나는 두 가지 질문이 있습니다. 대신 내가해야 할 일에 대해 제안이 있습니까?

  2. 방금 ​​N CheckboxPreferences로 구성된 또 다른 기본 설정을 만들었습니다. JoinQueueTask()를 호출하는 관점에서 이들을 "어떻게 처리해야합니까?"(JoinQueue extends AsyncTask) execute (String queue_key)?

관련 코드 : 당신이 될 것이다 큰 스위치/case 문을 당신의 최선의 방법을 사용하여 처리하지 않으려면

public void onSharedPreferenceChanged(SharedPreferences arg0, String key) 
{ 
    if(isFirstRun) 
     return; 

    // Call Forward Preferences 
    if(key.contentEquals("call_forward_always")) 
    { 
     cfInfo[0] = "1"; 
     cfInfo[1] = arg0.getString(key, "ERROR"); 
     new PushCallForwardInfoTask().execute(cfInfo); 
     ep1.setSummary("Viderestiller til " + cfInfo[1]); 
    } 
    else if(key.contentEquals("call_forward_busy")) 
    { 
     cfInfo[2] = "1"; 
     cfInfo[3] = arg0.getString(key, "ERROR"); 
     new PushCallForwardInfoTask().execute(cfInfo); 
     ep2.setSummary("Viderestiller til " + cfInfo[3]); 
    } 
    else if(key.contentEquals("call_forward_noresponse")) 
    { 
     cfInfo[4] = "1"; 
     cfInfo[5] = arg0.getString(key, "ERROR"); 
     new PushCallForwardInfoTask().execute(cfInfo); 
     ep3.setSummary("Viderestiller til " + cfInfo[5]); 
    } 
    else if(key.contentEquals("call_forward_timeout")) 
    { 
     cfInfo[6] = arg0.getString(key, "ERROR"); 
     new PushCallForwardInfoTask().execute(cfInfo); 
     ep4.setSummary("Viderestiller efter " + cfInfo[6] + " sekunder"); 
    } 

    // Show Number Preferences 
    else if(key.contentEquals("shownumber_list")) 
    { 
     String[] newnumber = {""}; 
     newnumber[0] = arg0.getString(key, "ERROR"); 
     new PushNumberTask().execute(newnumber); 
     lp.setSummary(arg0.getString(key, "ERROR")); 
    } 

    // Voicemail Preferences 
    else if(key.contentEquals("voicemail_checkbox")) 
    { 
     final Boolean[] vmStatus = { Boolean.FALSE }; 
     vmStatus[0] = cp.isChecked(); 
     new PushVoicemailStatus().execute(vmStatus); 
    } 

} 

답변

0

는, 첫 번째 질문에 대답하려면 환경 설정을 확장 당신이 사용하고 있습니다. 예를 들어 많은 체크 박스를 사용한다면 체크 박스 환경 설정을 확장하고 오버라이드 된 메소드에 로직을 추가하십시오. 내 경험상이 방법은 코드를 줄이고 논리를 매우 쉽게 따라합니다. grepcode.com에서 원본이 무엇인지 알 필요가 있거나 뭔가를 "해킹"해야 할 필요가있는 경우 원본을 볼 수 있습니다.

+0

좋아요. 현재 솔루션이 좋지 않은지 알고 있습니까? – CodePrimate

+0

@litemode 음 ... 나는 그것이 나쁜 습관이라고 말하지 않을 것이다. 환경 설정은 일반적으로 문자열 (SDK가 JRE7로 이동하면 문자열을 전환 할 수 있음)이므로 안드로이드는이 상황을 처리하기 어렵게 만듭니다. 느슨하게 결합 된 코드를 유지하는 것이 좋습니다. 기본 설정 항목을 처리하는 것이 기본 설정 항목을 처리하는 것이 바로이 작업을 수행한다고 생각합니다. 그런 식으로 환경 설정을 추가하거나 제거하면 ... 한 곳에서만 발생합니다. 그러나 당신이하고있는 것이 필요하고 이용 가능한 유일한 방법, 당신이 편안하고 읽고 쉽게 유지할 수있는 상황이 있습니다. – jjNford

관련 문제