যেমনটি অন্যরা উল্লেখ করেছেন, AndroidViewModelঅ্যাপটি পেতে আপনি যা পেতে পারেন Contextকিন্তু আমি যে মন্তব্যগুলিতে জড়ো করি তা থেকে আপনি নিজের @drawableমধ্যে থেকে গুলি ViewModelচালনার চেষ্টা করছেন যা উদ্দেশ্য এমভিভিএমকে পরাস্ত করে।
সাধারণত, একটি থাকতে হবে Contextআপনার ViewModelপ্রায় সর্বজনীন প্রস্তাব দেওয়া আপনি ভান্ডারের চিন্তা বিবেচনা করা উচিত কিভাবে আপনি আপনার মধ্যে যুক্তিবিজ্ঞান ভাগ Views এবং ViewModels।
ViewModelসমাধানযোগ্য ড্রয়াবলগুলি না করে এবং এটিকে ক্রিয়াকলাপ / খণ্ডকে খাওয়ানোর পরিবর্তে খন্ড / ক্রিয়াকলাপটি দ্বারা প্রাপ্ত ডেটার উপর ভিত্তি করে ড্রবেবলগুলিকে জাগল রাখার বিষয়টি বিবেচনা করুন ViewModel। বলুন, অন / অফ স্টেটের জন্য আপনাকে বিভিন্ন চিত্র প্রদর্শন করতে হবে - এটিই ViewModelসম্ভবত (সম্ভবত বুলিয়ান) স্টেটে রাখা উচিত Viewতবে ততক্ষণে আঁকিয়ে বাছাই করা এটির ব্যবসা।
এটি ডেটাবাইন্ডিংয়ের মাধ্যমে বেশ সহজভাবে করা যেতে পারে :
<ImageView
...
app:src="@{viewModel.isOn ? @drawable/switch_on : @drawable/switch_off}"
/>
আপনার যদি আরও রাজ্য এবং আঁকতে সক্ষম হয় তবে বিন্যাস ফাইলে অযৌক্তিক যুক্তি এড়াতে আপনি একটি কাস্টম বাইন্ডিংএডাপ্টার লিখতে পারেন যা অনুবাদ করে বলতে পারেন, একটি Enumমান R.drawable.*(যেমন কার্ড স্যুট)
অথবা হয়ত আপনি প্রয়োজন Contextকিছু জন্য আপনি যে উপাদানটি মধ্যে ব্যবহারের জন্য আপনার ViewModel- তারপর, বাহিরে উপাদান তৈরি ViewModelকরুন এবং এটা পাস আপনি দ্বি, অথবা singletons ব্যবহার করতে পারেন, বা তৈরি করুন। ContextInitialising আগে -dependent উপাদান অধিকার ViewModelমধ্যে Fragment/ Activity।
কেন বিরক্ত হবে: Contextএকটি অ্যান্ড্রয়েড-নির্দিষ্ট জিনিস, এবং ViewModelএর মধ্যে থাকা তাদের উপর নির্ভর করা একটি খারাপ অভ্যাস: তারা ইউনিট পরীক্ষার পথে দাঁড়ায়। অন্যদিকে, আপনার নিজস্ব উপাদান / পরিষেবা ইন্টারফেস পুরোপুরি আপনার নিয়ন্ত্রণে রয়েছে যাতে আপনি পরীক্ষার জন্য তাদের সহজেই উপহাস করতে পারেন।
AndroidViewModelকিন্তু পেয়েCannot create instance exceptionতারপর তুমি আমার এই উত্তর পাঠাতে পারেন stackoverflow.com/a/62626408/1055241