Saya ingin membaca string dari xml
file sebelum saya melakukan banyak hal lain seperti setText
pada widget, jadi bagaimana saya bisa melakukannya tanpa objek aktivitas untuk dipanggil getResources()
?
168
Application
, misalnyapublic class App extends Application {
android:name
atribut <application>
tag Anda di AndroidManifest.xml
untuk menunjuk ke kelas baru Anda, misalnyaandroid:name=".App"
onCreate()
metode instance aplikasi Anda, simpan konteks Anda (misalnya this
) ke bidang statis bernama mContext
dan buat metode statis yang mengembalikan bidang ini, misalnya getContext()
:Begini tampilannya:
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
Sekarang Anda dapat menggunakan: App.getContext()
kapan pun Anda ingin mendapatkan konteks, dan kemudian getResources()
(atau App.getContext().getResources()
).
Hanya untuk sumber daya sistem!
Menggunakan
Anda dapat menggunakannya di mana-mana dalam aplikasi Anda, bahkan dalam deklarasi konstanta statis!
sumber
Toast
misalnya, mendapatkanSharedPreference
contoh, membuka database, seperti kata guru bahasa Latin saya: et cetera ).Solusi Kotlin saya adalah menggunakan konteks Aplikasi statis:
Dan kelas Strings, yang saya gunakan di mana-mana:
Jadi Anda bisa memiliki cara yang bersih untuk mendapatkan string sumber daya
Tolong jangan hapus jawaban ini, biarkan saya simpan satu.
sumber
Strings
sangat membantu.Ada juga kemungkinan lain. Saya memuat shader OpenGl dari sumber daya seperti ini:
Seperti yang Anda lihat, Anda dapat mengakses sumber daya apa pun di jalur
/res/...
UbahaClass
ke kelas Anda. Ini juga cara saya memuat sumber daya dalam pengujian (androidTests)sumber
Singleton:
Inisialisasi Singleton di
Application
subkelas Anda :Jika saya tidak salah, ini memberi Anda pengait ke applicationContext di mana saja, sebut saja dengan itu.
ApplicationContextSingleton.getInstance.getApplicationContext();
Anda tidak perlu menghapus ini di titik mana pun, seperti saat aplikasi ditutup, ini tetap berlaku.Ingatlah untuk memperbarui
AndroidManifest.xml
untuk menggunakanApplication
subkelas ini :Sekarang Anda harus dapat menggunakan ApplicationContextSingleton.getInstance (). GetApplicationContext (). GetResources () dari mana saja, juga sangat sedikit tempat di mana subkelas aplikasi tidak bisa.
Tolong beri tahu saya jika Anda melihat sesuatu yang salah di sini, terima kasih. :)
sumber
Solusi lain:
Jika Anda memiliki subkelas statis di kelas luar non-statis, Anda dapat mengakses sumber daya dari dalam subkelas melalui variabel statis di kelas luar, yang Anda inisialisasi saat membuat kelas luar. Suka
Saya menggunakannya untuk Fungsi getPageTitle (posisi int) dari FragmentPagerAdapter statis dalam FragmentActivity saya yang berguna karena I8N.
sumber
Jalan pintas
Saya menggunakan
App.getRes()
sebagai gantinyaApp.getContext().getResources()
(seperti yang dijawab @Cristian)Sangat mudah digunakan di mana pun dalam kode Anda!
Jadi di sini adalah solusi unik dimana Anda dapat mengakses sumber daya dari mana saja seperti
Util class
.(1) Buat atau Edit
Application
kelas Anda .(2) Tambahkan bidang nama ke
manifest.xml
<application
tag Anda . (atau Lewati ini jika sudah ada)Sekarang kamu baik untuk pergi.
Gunakan
App.getRes().getString(R.string.some_id)
di mana saja dalam kode.sumber
Saya pikir, lebih banyak cara adalah mungkin. Namun terkadang, saya menggunakan solusi ini. (global lengkap):
sumber
Saya memuat shader untuk openGL ES dari fungsi statis.
Ingat Anda harus menggunakan huruf kecil untuk nama file dan direktori Anda, jika tidak operasi akan gagal
sumber
sumber
Saya menggunakan API level 27 dan menemukan solusi terbaik setelah berjuang selama sekitar dua hari. Jika Anda ingin membaca file xml dari kelas yang tidak berasal dari Aktivitas atau Aplikasi maka lakukan hal berikut.
Letakkan file testdata.xml di dalam direktori assets.
Tulis kode berikut untuk mendapatkan dokumen testdata diuraikan.
sumber
Di kelas Anda, tempat Anda menerapkan fungsi statis , Anda bisa memanggil metode privat \ publik dari kelas ini. Metode privat \ publik dapat mengakses getResources .
sebagai contoh:
dan dari aktivitas \ kelas lain, Anda dapat memanggil:
sumber
jika Anda memiliki konteks, maksud saya di dalam;
Anda dapat menggunakan kode ini untuk mendapatkan sumber daya:
sumber