사용자 변경 환경 설정 후 조각으로 두 개의 텍스트 뷰를 업데이트해야합니다. 이미 비슷한 질문을 많이하지만, 도움이되지 않습니다. 나는 매번 모든 응용 프로그램을 업데이트하려고 노력하지만, 최선의 해결책은 아니라고 확신합니다. 도움을 주셔서 감사합니다.기본 설정이 변경된 후 단편에서 텍스트 뷰를 업데이트하는 방법
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);
}
그러나 문제는 여전히 "구현"입니다. 조각의 텍스트 뷰에 새 데이터를 설정하는 방법을 모르겠습니다.