2012-03-10 61 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“)。 我的方法错了吗?我在PreferencesActivity中实现了onSharedPreferenceChanged()方法?如果是这样,我如何在PreferencesActivity中使用MainActivity属性?

回答

3

findPreference()应该从实现PreferenceActivity接口的类中调用(在我的上下文中为PreferencesActivity)。 MainActivity属性可以通过SharedPreferences类访问。

+3

您可以分享您所做的代码更改以解决问题吗?我不完全知道你是如何实现它的。 – impossible 2016-07-04 06:59:57

相关问题