我需要在用户更改首选项后更新片段中的两个文本视图。我已经在寻找很多类似的问题,但它不会帮助我。我甚至尝试每次更新所有应用程序,但我确定这不是最佳解决方案。 将不胜感激任何帮助。如何在首选项已更改后更新片段中的文本视图
AppPreferenceActivity.java
public class AppPreferenceActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
}
public static class MyPreferenceFragment extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref);
}
}
}
WeatherFragment.java (我削减便利的代码)
public class WeatherFragment extends Fragment implements Constants {
TextView currentTemperatureField;
TextView pressureField;
//...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_weather, container, false);
currentTemperatureField = (TextView)rootView.findViewById(R.id.current_temperature_field);
pressureField = (TextView) rootView.findViewById(R.id.pressure_field);
//...
weatherAdapter = new WeatherAdapter(getContext(), weather);
ListView listView = (ListView)rootView.findViewById(R.id.listView);
listView.setAdapter(weatherAdapter);
return rootView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
updateWeatherData(new CityPreference(getActivity()).getCity());
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
tempPref = sharedPrefs.getString("tempPref", "Celsius");
pressurePref = sharedPrefs.getString("pressurePref","mmHg");
//...
}
private void renderWeather(JSONObject json){
try {
//...
if(pressurePref.equals("mmHg")) {
pressureField.setText(String.format("%.0f", (main.getDouble("pressure")/1.333)) + " mmHg");
}else{
pressureField.setText(String.format("%.0f", main.getDouble("pressure")) + " hPa");
}
if(tempPref.equals("Celsius")) {
currentTemperatureField.setText(String.format("%.1f", main.getDouble("temp")) + " ℃");
}else{
currentTemperatureField.setText(String.format("%.1f", (main.getDouble("temp")*1.8+32)) + " ℉");
}
//...
}catch(Exception e){
//...
}
}
}
UPD 感谢给@beeb。我已经使用OnSharedPreferenceChangeListener():
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//weatherFont = Typeface.createFromAsset(getActivity().getAssets(), "fonts/weather.ttf");
updateWeatherData(new CityPreference(getActivity()).getCity());
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
tempPref = sharedPrefs.getString("tempPref", "Celsius");
pressurePref = sharedPrefs.getString("pressurePref","mmHg");
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
Log.e("WeatherActivity: ","preferences have changed");
//Implementation
}
};
sharedPrefs.registerOnSharedPreferenceChangeListener(listener);
}
但我的问题仍然是“实施”。我不知道如何设置新的数据片段的文本。