PreferenceManager getDefaultSharedPreferences không được dùng nữa trong Android Q


Câu trả lời:


213

Bạn có thể sử dụng phiên bản thư viện hỗ trợ AndroidX của PreferenceManager, tức là androidx.preference.PreferenceManagervà không android.preference.PreferenceManager.

nhớ thêm phần sau vào build.gradle của bạn.

implementation 'androidx.preference:preference:1.1.1'

50
Bạn đã quên thêm phụ thuộc: thực hiện "androidx.preference: ưu đãi: 1.1.0"
Abhinav Saxena

1
@AbhinavSaxena Tất nhiên là có. Điều đó ngầm hiểu khi sử dụng thư viện hỗ trợ. Một bản chỉnh sửa trước đó cho câu trả lời này đã thêm độ trễ ktx chỉ kotlin; Tôi đã lùi lại bản chỉnh sửa đó vì nó chỉ dành cho kotlin.
laalto

Điều này có vẻ phải implementationkhông dependency?
Richard Barraclough

Điều đó cũng không hoạt động: Không thể giải quyết sự phụ thuộc cho ': app @ debugAndroidTest / compileClasspath': Không thể tìm thấy triển khai "androidx.preference: Priority: 1.1.0.
Richard Barraclough

Tôi tò mò; tại sao họ không dùng giao diện đó và một số cách khác để nhận được các tùy chọn được chia sẻ được ưu tiên hơn hay là chuyển sang androidx nhằm mục đích?
Edward Falk

154

Gói preferencecung cấp androidx PreferenceManager :

Java: implementation "androidx.preference:preference:1.1.1"

Kotlin: implementation "androidx.preference:preference-ktx:1.1.1"


tức là thay đổi android.preference.PreferenceManagerthànhandroidx.preference.PreferenceManager


Cũng xem PreferenceFragmentCompat , là PreferenceFragmentlớp hiện tại để sử dụng.


Đã thêm một liên kết trực tiếp vào PreferenceFragmentCompat, mà trước đó không tồn tại ... thường thì tiếp theo sẽ là một vấn đề không dùng nữa mà người ta có thể gặp phải, khi cố gắng cập nhật tùy chọn. Câu trả lời được liên kết khác chỉ có giá trị trong một khoảng thời gian giới hạn.
Martin Zeitler

Chúng ta có thể sử dụng trong các API trước API 29 không?
H.Karatsanov

3

Nếu bạn chỉ lưu và truy xuất các cặp khóa-giá trị, bạn có thể thay thế:

 prefs = PreferenceManager.getDefaultSharedPreferences(this); 

với:

 prefs = getSharedPreferences(
            "my.app.packagename_preferences", Context.MODE_PRIVATE);

Đảm bảo sử dụng đúng tên tệp cho triển khai mới, nếu không người dùng của bạn sẽ mất quyền truy cập vào mọi thứ được lưu bằng getDefaultSharedPreferences (!). Sau đây sẽ lấy tên tệp mà getDefaultSharedPreferences sử dụng:

getPackageName() + "_preferences"


1

Có, nó không được dùng nữa. Sử dụng Thư viện tùy chọn AndroidX để có hành vi nhất quán trên tất cả các thiết bị. Để biết thêm thông tin về cách sử dụng Thư viện tùy chọn AndroidX, hãy xem Cài đặt.

Làm theo điều này -

PreferenceManager

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.