Мне нужно обновить два текстовых фрагмента во фрагменте после пользовательских настроек. Я уже искал много похожих вопросов, но мне это не поможет. Я даже пытаюсь обновить все приложения каждый раз, но я уверен, что это не лучшее решение. Поймите любую помощь.Как обновить текст в фрагменте после изменения предпочтения
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);
}
, но моя проблема по-прежнему "Реализация". Я не знаю, как установить новые данные в textview фрагмента.