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