PreferenceFragment

public class SettingPrefsFragment extends PreferenceFragment implements OnPreferenceChangeListener,
        OnPreferenceClickListener {
    private CheckBoxPreference mAutoUpdate;
    private ListPreference mUpdateFrequency;
    private CheckBoxPreference mAutoLocate;
    private Preference mProductinfo;
    /*private CheckBoxPreference mSoundSetting;
    private CheckBoxPreference mLockscreenSetting;*/
   
    String mSummary;
    String mUpdateFreValue;
    String[] mUpdateFreArray;
    String[] mUpdateFreEntry;
   
    SimpleSharedPreference mSharedPreference;
    WeatherPresStorage mPresStorage;
    private PendingIntent mPendingIntent;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.layout.setting_preference);

        //mSharedPreference = new SimpleSharedPreference();
        mPresStorage = new WeatherPresStorage(getActivity());
        mSharedPreference = mPresStorage.getWeatherPreference();

        mUpdateFreValue = mSharedPreference.getUpdate_frequency();
        mUpdateFreArray = getResources().getStringArray(R.array.auto_update_frequency_value);
        mUpdateFreEntry = getResources().getStringArray(R.array.auto_update_frequency_entry);

        mAutoUpdate = (CheckBoxPreference) findPreference(SimpleSharedPreference.AUTO_UPDATE);
        mUpdateFrequency = (ListPreference) findPreference(SimpleSharedPreference.UPDATE_FREQUENCY);
        mAutoLocate = (CheckBoxPreference) findPreference(SimpleSharedPreference.AUTO_LOCATE);
        mProductinfo = (Preference) findPreference(SimpleSharedPreference.PRODUCT_INFO);
        /*mSoundSetting = (CheckBoxPreference) findPreference(SimpleSharedPreference.SOUND_SETTING);
        mLockscreenSetting = (CheckBoxPreference) findPreference(SimpleSharedPreference.LOCKSCREEN_SETTING);*/
       
        mAutoUpdate.setChecked(mSharedPreference.isAuto_update());
        mUpdateFrequency.setEnabled(mSharedPreference.isAuto_update());
        mAutoLocate.setChecked(mSharedPreference.isAuto_locate());
       
        mAutoUpdate.setOnPreferenceClickListener(this);
        mAutoUpdate.setOnPreferenceChangeListener(this);
        mUpdateFrequency.setOnPreferenceClickListener(this);
        mUpdateFrequency.setOnPreferenceChangeListener(this);
        mAutoLocate.setOnPreferenceClickListener(this);
        mAutoLocate.setOnPreferenceChangeListener(this);
        mProductinfo.setOnPreferenceClickListener(this);
        /*mSoundSetting.setOnPreferenceClickListener(this);
        mSoundSetting.setOnPreferenceChangeListener(this);
        mLockscreenSetting.setOnPreferenceClickListener(this);
        mLockscreenSetting.setOnPreferenceChangeListener(this);*/      
    }

    @Override
    public void onResume() {
        for (int i = 0; i < mUpdateFreArray.length; i++) {
            if (mUpdateFreValue.equals(mUpdateFreArray[i])) {
                mUpdateFrequency.setValueIndex(i);
                mSummary = mUpdateFreEntry[i];
            }
        }
        mUpdateFrequency.setSummary(String.format(
                getString(R.string.auto_update_frequency_summary), mSummary));
        super.onResume();
    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
        if (preference.getKey().equals(SimpleSharedPreference.PRODUCT_INFO)) {
            Log.d("xcl00","preference.getKey().equals(SimpleSharedPreference.PRODUCT_INFO)");
            new AlertDialog.Builder(getActivity())
            .setMessage(R.string.product_infomation)
            .setTitle(R.string.productinfo)
            .setNegativeButton(R.string.button_ok, null)
            .create()
            .show();
        }
        return true;
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        if (preference.getKey().equals(SimpleSharedPreference.AUTO_UPDATE)) {
            boolean value = (Boolean) newValue;
            mSharedPreference.setAuto_update(value);
            mPresStorage.saveWeatherPreference(mSharedPreference);
            if (value == false) {
                mUpdateFrequency.setEnabled(false);
                if (mPendingIntent!=null){
                    mPendingIntent.cancel();
                }
            } else {
                mUpdateFrequency.setEnabled(true);
                setAlarm();
            }
        } else if (preference.getKey().equals(SimpleSharedPreference.UPDATE_FREQUENCY)) {
            mSharedPreference.setUpdate_frequency((String) newValue);
            mPresStorage.saveWeatherPreference(mSharedPreference);
            for (int i = 0; i < mUpdateFreArray.length; i++) {
                mUpdateFreValue = (String) newValue;
                if (mUpdateFreValue.equals(mUpdateFreArray[i])) {
                    mUpdateFrequency.setValueIndex(i);
                    mSummary = mUpdateFreEntry[i];
                }
            }
            mUpdateFrequency.setSummary(String.format(
                    getString(R.string.auto_update_frequency_summary), mSummary));
            setAlarm();
        } else if (preference.getKey().equals(SimpleSharedPreference.AUTO_LOCATE)) {
            mSharedPreference.setAuto_locate((Boolean) newValue);
            mPresStorage.saveWeatherPreference(mSharedPreference);
        } /*else if (preference.getKey().equals(SimpleSharedPreference.SOUND_SETTING)) {
            mSharedPreference.setSound_setting((Boolean) newValue);
        } else if (preference.getKey().equals(SimpleSharedPreference.LOCKSCREEN_SETTING)) {
            mSharedPreference.setLockscreen_setting((Boolean) newValue);
        }*/else {
            return false;
        }
        return true;
    }
   
    private void setAlarm(){
        if (mPendingIntent!=null){
            mPendingIntent.cancel();
        }
        String mTimeString = mPresStorage.getWeatherPreference().getUpdate_frequency();
        long mTimeLong = System.currentTimeMillis() + Long.parseLong(mTimeString) * 3600
                * 1000;
        AlarmManager mManager = (AlarmManager) getActivity().getSystemService(
                Context.ALARM_SERVICE);
        Intent alarmIntent = new Intent(DataService.AUTO_UPDATE_ACTION);
        mPendingIntent = PendingIntent.getBroadcast(getActivity(), 0,
                alarmIntent, 1);
        mManager.set(AlarmManager.RTC_WAKEUP, mTimeLong, mPendingIntent);
    }
}

<PreferenceScreen

        
xmlns:android
=
"http://schemas.android.com/apk/res/android"
>


    
<PreferenceCategory

            
android:title
=
"@string/inline_preferences"
>


        
<CheckBoxPreference

                
android:key
=
"checkbox_preference"

                
android:title
=
"@string/title_checkbox_preference"

                
android:summary
=
"@string/summary_checkbox_preference"
 
/>


    
</PreferenceCategory>


    
<PreferenceCategory

            
android:title
=
"@string/dialog_based_preferences"
>


        
<EditTextPreference

                
android:key
=
"edittext_preference"

                
android:title
=
"@string/title_edittext_preference"

                
android:summary
=
"@string/summary_edittext_preference"

                
android:dialogTitle
=
"@string/dialog_title_edittext_preference"
 
/>


        
<ListPreference

                
android:key
=
"list_preference"

                
android:title
=
"@string/title_list_preference"

                
android:summary
=
"@string/summary_list_preference"

                
android:entries
=
"@array/entries_list_preference"

                
android:entryValues
=
"@array/entryvalues_list_preference"

                
android:dialogTitle
=
"@string/dialog_title_list_preference"
 
/>


    
</PreferenceCategory>


    
<PreferenceCategory

            
android:title
=
"@string/launch_preferences"
>


        
<!-- This PreferenceScreen tag serves as a screen break (similar to page break
             in word processing). Like for other preference types, we assign a key
             here so it is able to save and restore its instance state. -->

        
<PreferenceScreen

                
android:key
=
"screen_preference"

                
android:title
=
"@string/title_screen_preference"

                
android:summary
=
"@string/summary_screen_preference"
>


            
<!-- You can place more preferences here that will be shown on the next screen. -->


            
<CheckBoxPreference

                    
android:key
=
"next_screen_checkbox_preference"

                    
android:title
=
"@string/title_next_screen_toggle_preference"

                    
android:summary
=
"@string/summary_next_screen_toggle_preference"
 
/>


        
</PreferenceScreen>


        
<PreferenceScreen

                
android:title
=
"@string/title_intent_preference"

                
android:summary
=
"@string/summary_intent_preference"
>


            
<intent
 
android:action
=
"android.intent.action.VIEW"

                    
android:data
=
"http://www.android.com"
 
/>


        
</PreferenceScreen>


    
</PreferenceCategory>


    
<PreferenceCategory

            
android:title
=
"@string/preference_attributes"
>


        
<CheckBoxPreference

                
android:key
=
"parent_checkbox_preference"

                
android:title
=
"@string/title_parent_preference"

                
android:summary
=
"@string/summary_parent_preference"
 
/>


        
<!-- The visual style of a child is defined by this styled theme attribute. -->

        
<CheckBoxPreference

                
android:key
=
"child_checkbox_preference"

                
android:dependency
=
"parent_checkbox_preference"

                
android:layout
=
"?android:attr/preferenceLayoutChild"

                
android:title
=
"@string/title_child_preference"

                
android:summary
=
"@string/summary_child_preference"
 
/>


    
</PreferenceCategory>



</PreferenceScreen>

猜你喜欢

转载自yulincqupt.iteye.com/blog/1682513
今日推荐