我有一个微调器,其中各种值更新TextView。例如,Spinner中的0(默认值)显示“ - min”,而12显示TextView中的“60分钟”。此微调器位于activity_main中TabLayout内部的片段内。我有一个PreferenceFragment(它在一个普通的Activity中,因为在使用FragmentActivity的时候我得到了工具条的重叠,这个Activity可以通过菜单调用),我可以将时间单位设置为几小时或几分钟。在我上面的例子中,设置是分钟。更改首选项后Android重新启动片段
当我将分钟更改为几小时时,我希望TextView在离开PreferenceFragment并返回主活动时更改为“ - hr”。这只适用于重新启动应用程序时,但我认为应该可以在不重新启动的情况下执行此操作。这是我的代码。
MyApplication.java
public class MyApplication extends Application {
@Override
public void onCreate() {
PreferenceManager.setDefaultValues(this, R.xml.user_settings, false);
super.onCreate();
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
String time = settings.getString("TIME", "");
if ("".equals(time)) {
settings.edit().putString("TIME", "2").commit();
} else if ("1".equals(time)) {
settings.edit().putString("TIME", "1").commit();
} else if ("2".equals(time)) {
settings.edit().putString("TIME", "2").commit();
}
}
}
activity_settings.xml
<fragment
android:id="@+id/fragment_settings"
android:name="com.arjendejong.ovengevormdglas.SettingsFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/toolbar" />
user_settings.xml
<ListPreference
android:defaultValue="2"
android:entries="@array/time_unit"
android:entryValues="@array/listTimeValues"
android:key="time_unit"
android:title="@string/time_unit" />
SettingsFragment.java
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.user_settings);
ListPreference timeUnitPref = (ListPreference) findPreference("time_unit");
timeUnitPref.setSummary(timeUnitPref.getEntry());
timeUnitPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
preference.setSummary(o.toString());
return true;
}
});
ListPreference timeUnitPreference = (ListPreference) findPreference("time_unit");
timeUnitPreference.setOnPreferenceChangeListener(timeUnitChangeListener);
}
Preference.OnPreferenceChangeListener timeUnitChangeListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
ListPreference timeUnitPref = (ListPreference)findPreference("time_unit");
switch (newValue.toString()) {
case "1":
PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).edit().putString("TIME", "1").commit();
timeUnitPref.setSummary(timeUnitPref.getEntry());
Toast.makeText(getActivity().getBaseContext(), "UREN", Toast.LENGTH_LONG).show();
Log.d("DEBUG","UREN");
timeUnitPref.setSummary(R.string.time_hours);
break;
case "2":
PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).edit().putString("TIME", "2").commit();
timeUnitPref.setSummary(timeUnitPref.getEntry());
Toast.makeText(getActivity().getBaseContext(), "MINUTEN", Toast.LENGTH_LONG).show();
Log.d("DEBUG","MINUTEN");
timeUnitPref.setSummary(R.string.time_minutes);
break;
/*default:
PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).edit().putString("TIME", "2").commit();
timeUnitPref.setSummary(timeUnitPref.getEntry());
Toast.makeText(getActivity().getBaseContext(), R.string.save_language_changes, Toast.LENGTH_LONG).show();
timeUnitPref.setSummary(R.string.time_minutes);
break;*/
}
return true;
}
};
}
TabFragment
public class TabFragment2 extends Fragment {
TextView seekBarValue,iniCoolTimeValue, secCoolTimeValue, thirdCoolTimeValue;
Double sum;
private SharedPreferences pref;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_fragment_2, container, false);
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext());
String time = settings.getString("TIME", "");
seekBarValue = (TextView)v.findViewById(R.id.seekBarValue);
iniCoolTimeValue = (TextView)v.findViewById(R.id.iniCoolTimeValue);
secCoolTimeValue = (TextView)v.findViewById(R.id.secCoolTimeValue);
thirdCoolTimeValue = (TextView)v.findViewById(R.id.thirdCoolTimeValue);
SeekBar seekBar = (SeekBar)v.findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
seekBarValue.setText(String.valueOf(progress));
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext());
String time = settings.getString("TIME", "");
if (progress >= 0 && progress < 1) {
if(time.equals("1")) {
iniCoolTimeValue.setText("- hr");
secCoolTimeValue.setText("- hr");
thirdCoolTimeValue.setText("- hr");
} else if(time.equals("2")){
iniCoolTimeValue.setText("- min");
secCoolTimeValue.setText("- min");
thirdCoolTimeValue.setText("- min");
}
}
else if (progress >= 1 && progress < 13) {
if(time.equals("1")){
sum = (482.0-427.0)/55.0;
DecimalFormat sumResult = new DecimalFormat("0.0");
iniCoolTimeValue.setText(sumResult.format(sum) + " hr");
sum = (427.0-371.0)/99.0;
DecimalFormat sumResult2 = new DecimalFormat("0.0");
secCoolTimeValue.setText(sumResult2.format(sum) + " hr");
sum = (371.0-21.0)/330.0;
DecimalFormat sumResult3 = new DecimalFormat("0.0");
thirdCoolTimeValue.setText(sumResult3.format(sum) + " hr");
} else if(time.equals("2")){
sum = (482.0 - 427.0)/55.0 * 60.0;
DecimalFormat sumResult = new DecimalFormat("0");
sumResult.setRoundingMode(RoundingMode.HALF_UP);
iniCoolTimeValue.setText(sumResult.format(sum) + " min");
sum = (427.0 - 371.0)/99.0 * 60.0;
DecimalFormat sumResult2 = new DecimalFormat("0");
sumResult.setRoundingMode(RoundingMode.HALF_UP);
secCoolTimeValue.setText(sumResult2.format(sum) + " min");
sum = (371.0 - 21.0)/330.0 * 60.0;
DecimalFormat sumResult3 = new DecimalFormat("0");
sumResult.setRoundingMode(RoundingMode.HALF_UP);
thirdCoolTimeValue.setText(sumResult3.format(sum) + " min");
}
}
}
});
if(time.equals("1")) {
iniCoolTimeValue.setText("- hr");
secCoolTimeValue.setText("- hr");
thirdCoolTimeValue.setText("- hr");
} else if(time.equals("2")) {
iniCoolTimeValue.setText("- min");
secCoolTimeValue.setText("- min");
thirdCoolTimeValue.setText("- min");
}
return v;
}
@Override
public void onResume() {
super.onResume();
registerChangeListener();
}
private void registerChangeListener() {
final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
sp.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
String time = sp.getString("TIME", "");
if ("1".equals(time)) {
sp.edit().putString("TIME", "1").commit();
Log.d("TIME UNIT", time);
} else if ("2".equals(time)) {
sp.edit().putString("TIME", "2").commit();
Log.d("TIME UNIT", time);
}
}
});
}
}
字符串
<string name="time_unit">Time unit</string>
<string-array name="time_unit">
<item name="hours">Hours</item>
<item name="minutes">Minutes</item>
</string-array>
<string-array name="listTimeValues">
<item name="hours">1</item>
<item name="minutes">2</item>
</string-array>
<string name="time_hours">Hours</string>
<string name="time_minutes">Minutes</string>
在onResume();
的registerChangeListener();
内TabFragment2
作品,因为当我更改了设置,我看到Android Monitor中出现了日志。
当我离开Preferences并返回到TabFragment的上一个活动时,如何反映设置更改?