Saya hanya memperhatikan fakta bahwa metode addPreferencesFromResource(int preferencesResId)
ini ditandai tidak digunakan lagi dalam dokumentasi Android ( Entri Referensi ).
Sayangnya, tidak ada metode alternatif yang disediakan dalam deskripsi metode ini.
Metode mana yang harus digunakan sebagai gantinya untuk menghubungkan preferensiScreen.xml ke PreferenceActivity yang cocok?
addPreferencesFromResource(int preferencesResId)
. Apakah saya melewatkan sesuatu?Jawaban:
Tidak ada metode alternatif yang disediakan dalam deskripsi metode karena pendekatan yang disukai (pada API level 11) adalah untuk instantiate objek PreferenceFragment untuk memuat preferensi Anda dari file sumber daya. Lihat contoh kode di sini: PreferenceActivity
sumber
Untuk menambahkan lebih banyak informasi ke jawaban yang benar di atas, setelah membaca contoh dari Android-er saya menemukan Anda dapat dengan mudah mengubah aktivitas preferensi Anda menjadi fragmen preferensi. Jika Anda memiliki aktivitas berikut:
Satu-satunya perubahan yang harus Anda lakukan adalah membuat kelas fragmen internal, memindahkannya
addPreferencesFromResources()
ke fragmen, dan meminta fragmen dari aktivitas, seperti ini:Mungkin ada seluk-beluk lain untuk membuat preferensi yang lebih kompleks dari fragmen; jika demikian, saya harap seseorang mencatatnya di sini.
sumber
addPreferencesFromResources()
dalam perdagangan untuk PreferenceFragment? Tampaknya tidak perlu dari sudut pandang pemula.@ Garret Wilson Terima kasih banyak! Sebagai noob untuk pengkodean android, saya telah terjebak dengan masalah ketidakcocokan preferensi selama berjam-jam, dan saya merasa sangat mengecewakan mereka mencela penggunaan beberapa metode / pendekatan untuk yang baru yang tidak didukung oleh API yang lebih lama sehingga harus menggunakan segala macam solusi untuk membuat aplikasi Anda berfungsi dalam berbagai perangkat. Benar-benar membuat frustrasi!
Kelas Anda sangat bagus, karena memungkinkan Anda untuk tetap bekerja di API baru dengan preferensi seperti dulu, tetapi tidak kompatibel ke belakang. Karena saya mencoba menjangkau berbagai perangkat, saya bermain-main sedikit untuk membuatnya berfungsi di pra-API 11 perangkat serta di API yang lebih baru:
Diuji dalam dua emulator (2.2 dan 4.2) dengan sukses.
Mengapa kode saya terlihat sangat jelek:
Saya noob untuk coding Android, dan saya bukan penggemar java terbesar.
Untuk menghindari peringatan yang sudah usang dan memaksa Eclipse untuk mengizinkan saya mengkompilasi, saya harus menggunakan anotasi, tetapi ini tampaknya hanya memengaruhi kelas atau metode, jadi saya harus memindahkan kode ke dua metode baru untuk memanfaatkan ini.
Saya tidak ingin menulis id sumber daya xml saya dua kali kapan saja saya menyalin & menempelkan kelas untuk PreferenceActivity baru, jadi saya membuat variabel baru untuk menyimpan nilai ini.
Saya harap ini akan bermanfaat bagi orang lain.
PS: Maaf atas pandangan saya yang berpendapat, tetapi ketika Anda datang baru dan menemukan cacat seperti itu, Anda tidak bisa menahan diri untuk frustrasi!
sumber
Pendekatan saya sangat dekat dengan pendekatan Garret Wilson (terima kasih, saya memilih Anda;)
Selain itu memberikan kompatibilitas ke bawah dengan Android <3.
Saya baru menyadari bahwa solusi saya bahkan lebih dekat dengan yang dibuat oleh Kevin Remo . Ini hanya sedikit lebih bersih (karena tidak bergantung pada antipattern "expection" ).
Untuk contoh "nyata" (tetapi lebih kompleks) lihat NusicPreferencesAktivitas dan NusicPreferencesFragment .
sumber
@SuppressLint("NewApi")
- Hindari - lebih tepat. Apakah Anda menjalankannya untuk apis rendah? Ini akan melemparVerifyError
@SuppressLint("NewApi")
hanya gaya buruk@SuppressLint("NewApi")
dalam situasi khusus ini?@TargetApi(Build.VERSION_CODES.HONEYCOMB)
- tidak semua peringatan untuk api apa pun :)Alih-alih pengecualian, cukup gunakan:
dan gunakan
untuk menekan peringatan.
sumber
Alih-alih menggunakan a
PreferenceActivity
untuk memuat preferensi secara langsung, gunakan aAppCompatActivity
atau yang setara yang memuat aPreferenceFragmentCompat
yang memuat preferensi Anda. Itu bagian dari perpustakaan dukungan (sekarang Android Jetpack) dan menyediakan kompatibilitas kembali ke API 14.Di Anda
build.gradle
, tambahkan ketergantungan untuk pustaka dukungan preferensi:Catatan: Kami akan menganggap Anda memiliki preferensi Anda XML sudah dibuat.
Untuk aktivitas Anda, buat kelas aktivitas baru. Jika Anda menggunakan tema materi, Anda harus memperluas
AppCompatActivity
, tetapi Anda bisa fleksibel dengan ini:Sekarang untuk bagian yang penting: buat sebuah fragmen yang memuat preferensi Anda dari XML:
Untuk informasi lebih lanjut, baca Android Developers docs untuk
PreferenceFragmentCompat
.sumber