2011-12-22 1 views
4

에 보이지 않는 "학습 안드로이드,"나는 내 응용 프로그램에 대한 응용 프로그램 클래스를 만들었습니다내 공공 var에 마젠타의 책에서 영감을 사촌

그러나
public class KITAppClass extends Application implements 
     OnSharedPreferenceChangeListener { 

     private static final String TAG = KITAppClass.class.getSimpleName(); 
     //private SharedPreferences KITPrefs; 
      public SharedPreferences KITPrefs;   
. . . 

, 지금은 "얻고 KITPrefs가 해결 될 수 없다 "는 된 SharedPreferences 참조하는 다른 클래스 파일에서이 라인 :

allContacts.setSelected(KITPrefs.getBoolean("allContacts", false)); 

내가 궁금하네요 다음의 환경 설정이 공유하는 경우, 그들은 왜 표시된"예제 코드에서 "개인을? "공개"로 표시 한 후에도 여전히 보이지 않는 이유는 무엇입니까?

"import KITAppClass;"를 추가하면 나는 거의

답변

1

보십시오 ... ... 예를 들어, 사용 (그들은 같은 공간을 점유 가정)

KITAppClass.kitPrefs.getBoolean(...); 

을 얻을 수 있으므로 클래스의 인스턴스를 Application 클래스 수준으로 유지하는 것은 중요하지 않습니다.은 언제든지 Activity에 있습니다. Using Shared Preferences을 참조하십시오.

또한 정말로 실제로해야 할 필요가없는 한 실제로는 Application을 확장하는 것에 대해 두 번 생각해보십시오. 대다수의 경우 (최소한 간단한 앱의 경우) 반드시 필요한 것은 아닙니다. 그들이 책에서 그것을하는 방법을 보여주고 있다고해서 그것이 당신이 그것을 할 필요가 있다는 것을 의미하지는 않습니다.

+0

감사합니다. 또한, 당신은 내가 응용 프로그램을 확장하는 지혜 또는 필요성을 의심하게 만드는 데 성공했습니다. 그러나 이것이 내가 생각한 것입니다. (이것이 의미가 있는지 /하지 않는지 알려주세요) : 내 앱의 유일한 GUI는 환경 설정 화면입니다. 그렇지 않으면 앱이 수행하는 모든 작업이 "배후에서"수행됩니다. 응용 프로그램은 전화의 OnBoot() 이벤트 (또는 호출 된 모든 것)를 청취하는 BroadcastReceiver를 통해 시작한 다음 조건에 따라 0, 1 또는 2 서비스를 시작합니다 (특정 기본 설정 항목의 값에 따라 다름). –

+0

파트 II : 이런 식으로, Application 서브 클래스는 git-go에서 초기화된다. hmmm, 네, Services는 응용 프로그램 서브 클래스가 인스턴스화하지 않고 필요에 따라 기본 설정을 간단히 참조 할 수 있다고 생각합니다. ... –

+0

@Clay :'Application'을 확장 할 때 실제적인 옳고 그른 것은 없습니다. - 그것이 필요한지 아닌지를 결정할 필요가 있습니다. 그것이 아니라면, 당신은 아직 또 다른 코드를 유지하는 것에 매달려 있음을 의미합니다. 그것없이 당신의 구성 요소를 함께 묶을 수 있다면 그것을 뺀다. 상황이 복잡해지면'Application'을 확장하는 것이 헬퍼 클래스에 대한 '정적 인'참조로 앵커 역할을 할 수 있으므로 최선의 방법이 될 수 있습니다.하지만이를 각 경우별로 살펴볼 필요가 있습니다. 어쨌든, 내가 도울 수있어서 기뻤습니다. 재미있게 보내십시오. – Squonk

1

당신이 getApplicationContext()를 사용하고 Application 클래스를 캐스팅 수있는 다른 Activity 클래스에서 KITPrefs에 액세스하려면 "가져 오기 KITAppClass가 해결 될 수 없다"로 paddled 얻을.

public class KITAppClass extends Application implements 
    OnSharedPreferenceChangeListener { 
    ... 
    protected static SharedPreferences kitPrefs; 
    ... 
} 

그런 다음 응용 프로그램에 Activity (또는 다른) 클래스에서 kitPrefs에 액세스

((KITAppClass)getApplicationContext()).KITPrefs.getBoolean("allContacts", false);