java 阳光偏好片段第2部分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 阳光偏好片段第2部分相关的知识,希望对你有一定的参考价值。
<?xml version="1.0" encoding="utf-8"?>
<!-- COMPLETED (7) Make the SettingsFragment the root layout for SettingsActivity -->
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.example.android.sunshine.SettingsFragment"
android:id="@+id/weather_settings_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!--COMPLETED (6) Add preferenceTheme to AppTheme and set to @style/PreferenceThemeOverlay-->
<!-- for settings preference theme -->
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
</resources>
package com.example.android.sunshine;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.support.v7.preference.PreferenceScreen;
/**
* The SettingsFragment serves as the display for all of the user's settings. In Sunshine, the
* user will be able to change their preference for units of measurement from metric to imperial,
* set their preferred weather location, and indicate whether or not they'd like to see
* notifications.
*
* Please note: If you are using our dummy weather services, the location returned will always be
* Mountain View, California.
*/
// COMPLETED (4) Create SettingsFragment and extend PreferenceFragmentCompat
public class SettingsFragment extends PreferenceFragmentCompat implements
// COMPLETED (10) Implement OnSharedPreferenceChangeListener from SettingsFragment
SharedPreferences.OnSharedPreferenceChangeListener {
// COMPLETED (8) Create a method called setPreferenceSummary that accepts a Preference and an Object and sets the summary of the preference
private void setPreferenceSummary(Preference preference, Object value) {
String stringValue = value.toString();
String key = preference.getKey();
if (preference instanceof ListPreference) {
/* For list preferences, look up the correct display value in */
/* the preference's 'entries' list (since they have separate labels/values). */
ListPreference listPreference = (ListPreference) preference;
int prefIndex = listPreference.findIndexOfValue(stringValue);
if (prefIndex >= 0) {
preference.setSummary(listPreference.getEntries()[prefIndex]);
}
} else {
// For other preferences, set the summary to the value's simple string representation.
preference.setSummary(stringValue);
}
}
// COMPLETED (5) Override onCreatePreferences and add the preference xml file using addPreferencesFromResource
@Override
public void onCreatePreferences(Bundle bundle, String s) {
/* Add 'general' preferences, defined in the XML file */
addPreferencesFromResource(R.xml.pref_general);
// COMPLETED (9) Set the preference summary on each preference that isn't a CheckBoxPreference
SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
PreferenceScreen prefScreen = getPreferenceScreen();
int count = prefScreen.getPreferenceCount();
for (int i = 0; i < count; i++) {
Preference p = prefScreen.getPreference(i);
if (!(p instanceof CheckBoxPreference)) {
String value = sharedPreferences.getString(p.getKey(), "");
setPreferenceSummary(p, value);
}
}
}
// COMPLETED (13) Unregister SettingsFragment (this) as a SharedPreferenceChangedListener in onStop
@Override
public void onStop() {
super.onStop();
/* Unregister the preference change listener */
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
// COMPLETED (12) Register SettingsFragment (this) as a SharedPreferenceChangedListener in onStart
@Override
public void onStart() {
super.onStart();
/* Register the preference change listener */
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
// COMPLETED (11) Override onSharedPreferenceChanged to update non CheckBoxPreferences when they are changed
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Preference preference = findPreference(key);
if (null != preference) {
if (!(preference instanceof CheckBoxPreference)) {
setPreferenceSummary(preference, sharedPreferences.getString(key, ""));
}
}
}
}
以上是关于java 阳光偏好片段第2部分的主要内容,如果未能解决你的问题,请参考以下文章