การเข้าถึง strings.xml จาก ViewModel

ฉันกำลังใช้ Dagger 2 DataBindng และส่วนประกอบ Android Lifecycle ใหม่ซึ่งมี ViewModels

ภายใน ViewModel ของฉัน ฉันจะเข้าถึง strings.xml ของฉันได้อย่างไร ตอนแรกฉันคิดว่าจะฉีด Context เข้าไปใน viewModel แต่นี่จะทำให้หน่วยความจำรั่ว

มีวิธีอื่นอีกไหม?




คำตอบ (1)


มี AndroidViewModel ซึ่งรับ Application instance เป็นพารามิเตอร์

จากเอกสาร:

บริบทของแอปพลิเคชันทราบ ViewModel

คลาสย่อยต้องมีตัวสร้างที่ยอมรับ Application เป็นพารามิเตอร์เดียว

คุณสามารถดึงข้อมูลสตริงจาก strings.xml โดยใช้พารามิเตอร์นั้น


อย่างไรก็ตาม ที่เก็บในลิงก์ใช้ ViewModel ไม่ใช่ AndroidViewModel หากฉันขยาย ViewModel ของฉันไปใช้ AndroidViewModel และรวม Application - มันกำลังพยายามฉีด MyApplication แทน Application หาก นั่นสมเหตุสมผลแล้ว

ฉันได้ลองใช้ GithubBrowserSample แล้ว UserViewModel มีลักษณะดังนี้:


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

และนี่คือสิ่งที่ฉันได้ทำการเปลี่ยนแปลง:


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

person azizbekian    schedule 27.09.2017
comment
ที่จริงแล้วฉันยังคงมีปัญหาอยู่ เนื่องจากฉันใช้ Dagger ฉันจึงใช้ Constructor Inject ในโมเดลของฉัน ซึ่งหมายความว่าฉันไม่สามารถใช้ AndroidViewModel ได้ มีความคิดอะไรบ้าง? - person Robert J. Clegg; 27.09.2017
comment
ดูวิธีการแทรก ViewModels ใน GithubBrowserSample - person azizbekian; 27.09.2017
comment
นั่นคือวิธีที่ฉันฉีด ViewModels ของฉัน repo ในลิงก์ อย่างไรก็ตามใช้ ViewModel ไม่ใช่ AndroidViewModel ถ้าฉันขยาย ViewModel ของฉันไปใช้ AndroidViewModel และรวมแอปพลิเคชัน - มันพยายามฉีด MyApplication แทน Application ถ้ามันสมเหตุสมผล - person Robert J. Clegg; 27.09.2017
comment
คุณยังสามารถทดสอบหน่วย ViewModel กับ JUnit ได้หรือไม่ หากฉันต้องการส่งสตริงจาก ViewModel เพื่อดู จะแม่นยำกว่าไหมหากฉันส่งรหัสทรัพยากรสตริงกลับมาจาก Viewmodel ไปยังมุมมอง - person mallaudin; 26.04.2019
comment
@mallaudin คุณพูดถูกแล้ว ดีกว่าที่จะส่งรหัสสตริงแทนสตริงเอง ซึ่งสาเหตุหนึ่งของการดำเนินการดังกล่าวมีอธิบายไว้ใน โพสต์นี้ - person azizbekian; 26.04.2019
comment
ขอบคุณ @azizbekian สำหรับการแชร์โพสต์ - person mallaudin; 26.04.2019