Mengakses strings.xml dari ViewModel

Saya menggunakan Dagger 2 DataBindng dan komponen Siklus Hidup Android baru, yang memiliki ViewModels.

Di dalam ViewModel saya, bagaimana saya bisa mendapatkan akses ke strings.xml saya? Awalnya saya berpikir, untuk menyuntikkan Context ke viewModel, namun ini hanya akan membocorkan memori.

Apakah ada cara lain?


person Robert J. Clegg    schedule 27.09.2017    source sumber


Jawaban (1)


Ada AndroidViewModel, yang menerima Application instance sebagai parameter.

Dari dokumen:

ViewModel peka terhadap konteks aplikasi.

Subkelas harus memiliki konstruktor yang menerima Aplikasi sebagai satu-satunya parameter.

Anda dapat mengambil string dari strings.xml menggunakan parameter itu.


Namun repo di tautan menggunakan ViewModel dan bukan AndroidViewModel. Jika saya memperluas ViewModel saya untuk menggunakan AndroidViewModel dan menyertakan Aplikasi - ia mencoba memasukkan Aplikasi Saya alih-alih Aplikasi jika itu masuk akal.

Saya telah memeriksa GithubBrowserSample. Berikut tampilan UserViewModel:


    public class UserViewModel extends ViewModel {
        ...
        @Inject
        public UserViewModel(UserRepository userRepository, RepoRepository repoRepository) {
            ...
        }
        ...
    }

Dan inilah perubahan yang telah saya lakukan:


    public class UserViewModel extends AndroidViewModel {
        ...
        @Inject
        public UserViewModel(Application application, UserRepository userRepository, RepoRepository repoRepository) {
            super(application);
            ...
        }
        ...
    }

person azizbekian    schedule 27.09.2017
comment
Sebenarnya saya masih punya masalah. Karena saya menggunakan Dagger, saya menggunakan injeksi konstruktor di Model saya. Artinya saya tidak bisa menggunakan AndroidViewModel. Ada ide? - person Robert J. Clegg; 27.09.2017
comment
Lihat bagaimana ViewModels dimasukkan di GithubBrowserSample. - person azizbekian; 27.09.2017
comment
Begitulah cara saya menyuntikkan ViewModels saya. Namun repo di tautan menggunakan ViewModel dan bukan AndroidViewModel. Jika saya memperluas ViewModel saya untuk menggunakan AndroidViewModel dan menyertakan Aplikasi - ini mencoba memasukkan Aplikasi Saya alih-alih Aplikasi jika itu masuk akal. - person Robert J. Clegg; 27.09.2017
comment
Masih bisakah Anda menguji unit ViewModel dengan JUnit? Jika saya hanya perlu meneruskan string dari ViewModel ke tampilan, bukankah lebih akurat jika saya meneruskan String Resource Ids kembali dari Viewmodel ke Tampilan? - person mallaudin; 26.04.2019
comment
@mallaudin, Anda benar, lebih baik meneruskan id string daripada string itu sendiri, salah satu alasan melakukan hal itu diuraikan dalam postingan ini. - person azizbekian; 26.04.2019
comment
Terima kasih @azizbekian telah berbagi kiriman. - person mallaudin; 26.04.2019