8

Trong ứng dụng của tôi, một số cài đặt có thể được thay đổi trong khi PreferenceActivity không mở và sự cố tôi gặp phải là addPreferencesFromResource được gọi trong số onCreate, vì vậy, tôi mở PreferenceActivity, sau đó đi đến màn hình khác từ đó, sau đó thực hiện điều gì đó thay đổi cài đặt, sau đó nhấn phím quay lại để quay lại PreferenceActivity, sau đó một số cài đặt nhất định không thay đổi trên bố cục.Tải lại Tùy chọn trong PreferenceActivity trên Resume

Vì vậy, làm cách nào tôi có thể tải lại tất cả Preferences mỗi lần onResume (hoặc onStart()) được gọi mà không sao chép bố cục?

Trả lời

3

chỉnh sửa: Giải pháp này sẽ chỉ hoạt động đối với API 11 +.

Tôi không chắc chắn rằng tôi hoàn toàn hiểu vấn đề của bạn, nhưng bạn có thể thêm một cuộc gọi để tạo lại() vào onResume của hoạt động mà từ sự hiểu biết của tôi có hoạt động đi qua toàn bộ vòng đời một lần nữa.

Để đảm bảo rằng bạn chỉ làm điều này khi có dữ liệu thực tế, tôi sẽ đặt cờ trong SharedPreferences cho phép hoạt động của bạn biết trong onResume() cần được tạo lại.

public void onResume(){ 
      super.onResume(); 
      SharedPreferences pref = getApplicationContext().getSharedPreferences(Constants.PREFS_NAME, Context.MODE_PRIVATE); 
      if(pref.getBoolean("isDirtyPrefs", true)) 
       recreate(); 
     } 
+0

Cảm ơn bạn. Tôi chưa thử nghiệm, nhưng có vẻ như nó sẽ hoạt động. Tôi không biết lệnh createe() mà tôi đã tìm trong PreferenceActivity và PreferenceManager. Nhưng cảm ơn bạn, vì đó là chính xác những gì tôi muốn. – Jakar

+4

tái tạo là API lvl 11 – Blundell

+0

Tôi khuyên bạn nên kiểm tra logic vì điều này có thể lặp đi lặp lại vì onResume sẽ được gọi trong quy trình vòng đời và nếu nhà phát triển không đặt tùy chọn hoặc nó không có, nó sẽ mặc định là true và loop. –

1

Tôi gặp sự cố tương tự. Không tìm thấy một cách đơn giản để làm cho PreferenceActivity tôi làm mới bản thân, giải pháp của tôi là để thêm video này vào PreferenceActivity tôi:

/** 
* Called when activity leaves the foreground 
*/ 
protected void onStop() { 
    super.onStop(); 
    finish(); 
} 

này sẽ làm cho Prefs màn hình để tải lại từ SharedPreferences lần khởi động tiếp theo. Không cần phải nói, cách tiếp cận này sẽ không hoạt động nếu bạn muốn có thể quay lại màn hình tùy chọn của mình bằng cách sử dụng nút quay lại.

+0

Tôi đã xem xét điều đó, nhưng 'PreferenceActivity' của tôi bắt đầu các Hoạt động khác, và nó sẽ là quá nhiều rắc rối để ghi đè' onKeyDown' và 'onKeyUp' trong các hoạt động đó để bắt đầu lại' PreferenceActivity' của tôi. Cảm ơn bạn đã gợi ý, mặc dù. – Jakar