在Android中更改首选项后调用方法
我的偏好如下: settings.xml:在Android中更改首选项后调用方法,android,android-preferences,Android,Android Preferences,我的偏好如下: settings.xml: <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="@string/sectionOneTitle" > <EditTextPreference android:title="@string/
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="@string/sectionOneTitle" >
<EditTextPreference
android:title="@string/setModuleName"
android:summary="@string/setModuleNameSum"
android:key="moduleID"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/sectionTwoTitle" >
<EditTextPreference
android:title="@string/setPhoneNumber"
android:summary="@string/setPhoneNumberSum"
android:key="phoneNumber"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/sectionThreeTitle" >
<CheckBoxPreference android:title="@string/setSmsSend"
android:key="setSmsSend" android:summary="@string/setSmsSendSum" />
</PreferenceCategory>
</PreferenceScreen>
现在我需要在设置或取消设置复选框时在MAINActivity中调用一个方法。这可能吗
谢谢将共享首选项ChangeListener上的
添加到您的活动中:
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
...
public class MAINActivity extends Activity {
private OnSharedPreferenceChangeListener listener =
new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("setSmsSend") {
smsSendPrefChanged(); // the function you want called
}
}
};
@Override
protected void onCreate() {
super.onCreate();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(listener);
...
}
@Override
protected void onDestroy() {
super.onDestroy();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.unregisterOnSharedPreferenceChangeListener(listener);
...
}
...
}
将共享首选项ChangeListener上的添加到活动中:
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
...
public class MAINActivity extends Activity {
private OnSharedPreferenceChangeListener listener =
new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("setSmsSend") {
smsSendPrefChanged(); // the function you want called
}
}
};
@Override
protected void onCreate() {
super.onCreate();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(listener);
...
}
@Override
protected void onDestroy() {
super.onDestroy();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.unregisterOnSharedPreferenceChangeListener(listener);
...
}
...
}
使用PreferenceFragmentCompat
使用PreferenceFragmentCompat
这是首选项片段还是首选项活动这是我的设置。xml查看编辑是的,我意识到但是你用什么来显示这是首选项片段还是首选项活动这是我的设置。xml查看编辑是的,我意识到,但是你用什么来显示OnSharedPreferenceChangedListener类的外观比如?@progNewFag-很抱歉,名字有错。它是共享首选项ChangeListener的(“更改”,而不是“更改”)。咨询更多信息。我在示例中添加了一个import
语句来澄清。OnSharedPreferenceChangedListener类是什么样子的?@progNewFag-很抱歉-名称中有一个拼写错误。它是共享首选项ChangeListener的(“更改”,而不是“更改”)。咨询更多信息。我在示例中添加了一个import
语句来澄清。
public class FragmentSettings
extends PreferenceFragmentCompat
implements SharedPreferences.OnSharedPreferenceChangeListener
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.app_preferences);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
switch(key)
{
case "KEY1":
// DO STUFF
break;
case "KEY2":
// DO STUFF
break;
}
}