Reputation: 4812
i have my preferences like this:
settings.xml:
<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>
Settings Activity
public class SettingsActivity extends PreferenceActivity {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
Now i need to get a method in my MAINActivity called when the checkbox is set or unset. Is this possible?
Thanks
Upvotes: 2
Views: 2159
Reputation: 37
Using PreferenceFragmentCompat
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;
}
}
Upvotes: -1
Reputation: 234795
Add an OnSharedPreferenceChangeListener
to your activity:
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);
...
}
...
}
Upvotes: 7