2012-03-10 6 views
3

私はAndroidアプリの設定画面を操作しています。前のアイテムに特定の値がある場合、そのアイテムを無効にする(灰色で消したい)。Android:メインアクティビティからfindPreference()を呼び出すにはどうすればよいですか?

私はMainActivityとPreferencesActivityという2つのクラスを実装しています。

私は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 "...)。 私のアプローチは間違っていますか?私はPreferencesActivityのonSharedPreferenceChanged()メソッドを実装していますか?その場合、PreferencesActivityでMainActivityプロパティを使用するにはどうすればよいですか?

答えて

3

findPreference()は、PreferenceActivityインターフェイス(私の文脈ではPreferencesActivity)を実装するクラスから呼び出す必要があります。 MainActivityプロパティはSharedPreferencesクラスからアクセスできます。

+3

問題を解決するために行ったコードの変更を共有できますか?私はあなたがそれをどうやって実装したのか正確には分かりません。 – impossible

関連する問題