2012-03-10 3 views
3

Android 앱의 환경 설정 화면을 처리하고 있습니다. 이전 값에 특정 값이있는 경우 항목을 비활성화 (회색으로 표시)하고 싶습니다.Android : 내 주요 활동에서 findPreference()를 어떻게 호출합니까?

MainActivity와 PreferencesActivity의 두 클래스를 구현했습니다. MainActivity에서

내가 할 :

public class MainActivity extends Activity implements OnSharedPreferenceChangeListener { 
... 
    public void onCreate (Bundle savedInstanceState) { 
     ... 
     sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
     sharedPrefs.registerOnSharedPreferenceChangeListener(this); 
     ... 
    } 

그런 다음 내 환경 설정은 사용자가 요청 될 때 :

startActivity(new Intent(this, PreferencesActivity.class)); 

그런 다음, MainActivity에서 기본 설정을 처리하기 위해, 내가 할 :

@Override 
public void onSharedPreferenceChanged (SharedPreferences prefs, String key) { 
    if ("sport".equals(key)) { 
     sport = prefs.getString("sport", ""); 
     ListPreference lp = findPreference("match_duration"); 
     if (sport.equals(getString(R.string."sport_soccer"))) { 
      lp.setEnabled(false); 
     } 
    } 
    ... 
} 

문제는 MainActivity에서 findPreference를 호출 할 수 없다는 것입니다 ("findPreference (String) 메서드는 정의되지 않았습니다. e 유형 MainActivity "...). 내 접근 방식이 잘못 되었습니까? Shoud 나는 PreferencesActivity에서 onSharedPreferenceChanged() 메서드를 구현합니까? 그렇다면 PreferencesActivity에서 MainActivity 속성을 어떻게 사용합니까?

답변

3

findPreference()PreferenceActivity 인터페이스 (내 문맥에서는 PreferencesActivity)를 구현하는 클래스에서 호출해야합니다. MainActivity 속성은 SharedPreferences 클래스를 통해 액세스 할 수 있습니다.

+3

문제를 해결하기 위해 수행 한 코드 변경 사항을 알려주십시오. 정확히 어떻게 구현했는지 모르겠습니다. – impossible

관련 문제