ユーザー変更の設定後に2つのテキストビューをフラグメントで更新する必要があります。私はすでに同様の質問をたくさん探していますが、それは私を助けません。毎回すべてのアプリケーションを更新しようとしていますが、私はそれが最良の解決策ではないと確信しています。 助けていただければ幸いです。プリファレンスが変更された後にフラグメント内のテキストビューを更新する方法
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){
//...
}
}
}
@beebにUPD ありがとうございます。私はすでに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);
}
しかし、私の問題はまだ "実装"です。私はどのように新しいデータをフラグメントのテキストビューに設定するのか分かりません。