0

사용자 변경 환경 설정 후 조각으로 두 개의 텍스트 뷰를 업데이트해야합니다. 이미 비슷한 질문을 많이하지만, 도움이되지 않습니다. 나는 매번 모든 응용 프로그램을 업데이트하려고 노력하지만, 최선의 해결책은 아니라고 확신합니다. 도움을 주셔서 감사합니다.기본 설정이 변경된 후 단편에서 텍스트 뷰를 업데이트하는 방법

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); 
} 

그러나 문제는 여전히 "구현"입니다. 조각의 텍스트 뷰에 새 데이터를 설정하는 방법을 모르겠습니다.

답변

0

이와 같이 Fragment를 전달하는 대신 인스턴스를 만들어 다음과 같은 접근 방식을 채택하십시오.

myPreferenceFragment.updateText(text); 
0

SharedPreferences.onSharedPreferenceChangeListener()에 추가 :이 같은 텍스트를 업데이트 할 때

MyPreferenceFragment myPreferenceFragment; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     myPreferenceFragment = new MyPreferenceFragment() 
     getFragmentManager().beginTransaction().replace(android.R.id.content, myPreferenceFragment).commit(); 

    } 

다음 텍스트 뷰를

publich void updateText(String text) 
{ 
    textView.setText(text); 
} 

를 업데이트하고이 메소드를 호출하기 위해 조각에서 방법을 귀하의 WeatherFragment

listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
    // Implementation 
    } 
}; 

prefs.registerOnSharedPreferenceChangeListener(listener);