2014-10-07 2 views
1

у меня есть свои предпочтения, как это:метод вызова после изменения настроек в Android

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> 

Настройки активности

public class SettingsActivity extends PreferenceActivity { 
    @SuppressWarnings("deprecation") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 
    } 
} 

Теперь мне нужно получить метод в моем MAINActivity вызывается, когда флажок установлен или не установлен. Это возможно?

Благодаря

+0

этот фрагмент предпочтения или предпочтения активности – tyczj

+0

это мой settings.xml см edit – progNewbie

+0

yes Я понимаю это, но что вы используете для его отображения – tyczj

ответ

5

Добавить в OnSharedPreferenceChangeListener вашей деятельности:

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); 
     ... 
    } 

    ... 
} 
+0

Как выглядит класс OnSharedPreferenceChangedListener? – progNewbie

+0

@progNewFag - Извините, что в названии была опечатка. Это 'OnSharedPreferenceChangeListener' (« Изменить », а не« Изменено »). Для получения дополнительной информации обратитесь к [документам] (http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html). Я добавил выражение import для примера для пояснения. –

0

Использование 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; 
    } 
}