Android Jetpack এর অংশ সংরক্ষিত পছন্দ মান ব্যবহার করুন।
এই নথিটি বর্ণনা করে যে কীভাবে Preference
মানগুলি সংরক্ষণ এবং ব্যবহার করতে হয় যা পছন্দ গ্রন্থাগার দ্বারা সংরক্ষিত হয়।
পছন্দ ডেটা স্টোরেজ
এই বিভাগটি বর্ণনা করে যে কীভাবে একটি Preference
ডেটা বজায় রাখতে পারে।
ভাগ করা পছন্দসমূহ
ডিফল্টরূপে, একটি Preference
মান সংরক্ষণ করতে SharedPreferences
ব্যবহার করে। SharedPreferences
API একটি ফাইল থেকে সহজ কী-মান জোড়া পড়া এবং লেখা সমর্থন করে যা অ্যাপ্লিকেশন সেশন জুড়ে সংরক্ষিত হয়। পছন্দ লাইব্রেরি একটি ব্যক্তিগত SharedPreferences
উদাহরণ ব্যবহার করে যাতে শুধুমাত্র আপনার অ্যাপ্লিকেশন এটি অ্যাক্সেস করতে পারে।
একটি উদাহরণ হিসাবে, নিম্নলিখিত SwitchPreferenceCompat
অনুমান করুন:
<SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/>
যখন একজন ব্যবহারকারী এই সুইচটিকে "চালু" অবস্থায় টগল করেন, SharedPreferences
ফাইলটি "notifications" : "true"
এর একটি কী-মানের জোড়ার সাথে আপডেট হয়। ব্যবহৃত কীটি Preference
জন্য সেট করা কীটির মতোই।
SharedPreferences
API সম্পর্কে আরও তথ্যের জন্য, কী-মান ডেটা সংরক্ষণ করুন দেখুন।
অ্যান্ড্রয়েডে ডেটা সংরক্ষণের বিভিন্ন উপায় সম্পর্কে তথ্যের জন্য, ডেটা এবং ফাইল স্টোরেজ ওভারভিউ দেখুন।
পছন্দ ডেটাস্টোর
যদিও পছন্দের লাইব্রেরি ডিফল্টরূপে SharedPreferences
সহ ডেটা বজায় রাখে, SharedPreferences
সবসময় একটি আদর্শ সমাধান নয়। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশনটিতে কোনো ব্যবহারকারীকে সাইন ইন করার প্রয়োজন হয়, তাহলে আপনি ক্লাউডে অ্যাপ্লিকেশন সেটিংস বজায় রাখতে চাইতে পারেন যাতে সেটিংস অন্যান্য ডিভাইস এবং প্ল্যাটফর্মে প্রতিফলিত হয়। একইভাবে, যদি আপনার অ্যাপ্লিকেশানে কনফিগারেশন বিকল্প থাকে যা ডিভাইস-নির্দিষ্ট, ডিভাইসের প্রতিটি ব্যবহারকারীর আলাদা সেটিংস থাকে, যার ফলে SharedPreferences
একটি কম-আদর্শ সমাধান হয়।
একটি PreferenceDataStore
আপনাকে Preference
মান বজায় রাখতে একটি কাস্টম স্টোরেজ ব্যাকএন্ড ব্যবহার করতে দেয়। আরও তথ্যের জন্য, একটি কাস্টম ডেটাস্টোর ব্যবহার করুন দেখুন।
পছন্দের মান পড়ুন
ব্যবহার করা হচ্ছে SharedPreferences
অবজেক্ট পুনরুদ্ধার করতে, PreferenceManager.getDefaultSharedPreferences()
কল করুন। যদিও এই পদ্ধতিটি আপনার অ্যাপ্লিকেশানের যেকোন জায়গা থেকে কাজ করে, আমরা আপনাকে আপনার অ্যাপকে স্তরগুলিতে বিভক্ত করার পরামর্শ দিই৷ আরও তথ্যের জন্য, ডেটা স্তর দেখুন।
উদাহরণস্বরূপ, "signature"
এর একটি কী সহ একটি EditTextPreference
দেওয়া হয়েছে, নিম্নরূপ:
<EditTextPreference app:key="signature" app:title="Your signature"/>
আপনি বিশ্বব্যাপী এই Preference
জন্য সংরক্ষিত মান পুনরুদ্ধার করতে পারেন, নিম্নরূপ:
কোটলিন
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this /* Activity context */) val name = sharedPreferences.getString("signature", "")
জাভা
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this /* Activity context */); String name = sharedPreferences.getString("signature", "");
পছন্দ মান পরিবর্তনের জন্য শুনুন
Preference
মানগুলির পরিবর্তনগুলি শুনতে, আপনি দুটি ইন্টারফেসের মধ্যে বেছে নিতে পারেন:
নিম্নলিখিত সারণী দেখায় কিভাবে দুটি ইন্টারফেস পৃথক:
OnPreferenceChangeListener | OnSharedPreferenceChangeListener |
---|---|
একটি একক Preference উপর সেট করুন। | সমস্ত Preference বস্তুর জন্য প্রযোজ্য। |
বলা হয় যখন একটি Preference তার সংরক্ষিত মান পরিবর্তন করতে চলেছে, এমনকি যদি মুলতুবি থাকা মানটি সংরক্ষিত মানের সমান হয়। | একটি Preference জন্য সংরক্ষিত মান পরিবর্তন হলে শুধুমাত্র কল করা হয়। |
শুধুমাত্র Preference লাইব্রেরির মাধ্যমে কল করা হয়। অ্যাপ্লিকেশনটির একটি পৃথক অংশ সংরক্ষিত মান পরিবর্তন করতে পারে। | যখনই সংরক্ষিত মান পরিবর্তিত হয় তখন কল করা হয়, এমনকি এটি অ্যাপ্লিকেশনের একটি পৃথক অংশ থেকে হলেও। |
মুলতুবি থাকা মান সংরক্ষণ করার আগে কল করা হয়। | মান সংরক্ষণ করার পরে কল করা হয়। |
SharedPreferences বা একটি PreferenceDataStore ব্যবহার করার সময় কল করা হয়। | SharedPreferences ব্যবহার করার সময় শুধুমাত্র কল করা হয়। |
OnPreferenceChangeListener প্রয়োগ করুন
একটি OnPreferenceChangeListener
প্রয়োগ করার ফলে আপনি একটি Preference
মানের একটি মুলতুবি পরিবর্তন শুনতে পারবেন। তারপরে, আপনি পরিবর্তনটি ঘটবে কিনা তা যাচাই করতে পারেন। উদাহরণ স্বরূপ, নিম্নলিখিত কোডটি দেখায় কিভাবে একটি EditTextPreference
এর মান পরিবর্তনের জন্য "name"
-এর একটি কী দিয়ে শুনতে হয়:
কোটলিন
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean { Log.e("preference", "Pending Preference value is: $newValue") return true }
জাভা
@Override public boolean onPreferenceChange(Preference preference, Object newValue) { Log.e("preference", "Pending Preference value is: " + newValue); return true; }
এর পরে, আপনাকে এই শ্রোতাকে সরাসরি setOnPreferenceChangeListener()
দিয়ে সেট করতে হবে, নিম্নরূপ:
কোটলিন
preference.onPreferenceChangeListener = ...
জাভা
preference.setOnPreferenceChangeListener(...);
OnSharedPreferenceChangeListener প্রয়োগ করুন
SharedPreferences
ব্যবহার করে Preference
মান বজায় রাখার সময়, আপনি পরিবর্তনের জন্য একটি SharedPreferences.OnSharedPreferenceChangeListener
ব্যবহার করতে পারেন। এটি আপনাকে শুনতে দেয় যখন আপনার Preference
দ্বারা সংরক্ষিত মানগুলি পরিবর্তন করা হয়, যেমন একটি সার্ভারের সাথে সেটিংস সিঙ্ক করার সময়। নিচের উদাহরণটি দেখায় কিভাবে একটি EditTextPreference
এর মান পরিবর্তনের জন্য "name"
-এর একটি কী দিয়ে শুনতে হয়:
কোটলিন
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { if (key == "signature") { Log.i(TAG, "Preference value was updated to: " + sharedPreferences.getString(key, "")) } }
জাভা
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals("signature")) { Log.i(TAG, "Preference value was updated to: " + sharedPreferences.getString(key, "")); } }
registerOnSharedPreferenceChangedListener()
ব্যবহার করে শ্রোতা নিবন্ধন করুন, নিম্নরূপ:
কোটলিন
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(...)
জাভা
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(...);
কোটলিন
val listener: SharedPreferences.OnSharedPreferenceChangeListener = SharedPreferences.OnSharedPreferenceChangeListener {...}
জাভা
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {...}
আপনার Activity
বা Fragment
সঠিক লাইফসাইকেল ম্যানেজমেন্টের জন্য, এই শ্রোতাকে onResume()
এবং onPause()
কলব্যাকে নিবন্ধন করুন এবং আন-রেজিস্টার করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
কোটলিন
override fun onResume() { super.onResume() preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(this) } override fun onPause() { super.onPause() preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(this) }
জাভা
@Override public void onResume() { super.onResume(); getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() { super.onPause(); getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); }
একটি কাস্টম ডেটাস্টোর ব্যবহার করুন
যদিও আমরা SharedPreferences
ব্যবহার করে Preference
অবজেক্ট টিকে থাকার পরামর্শ দিই, আপনি একটি কাস্টম ডেটাস্টোরও ব্যবহার করতে পারেন। একটি কাস্টম ডেটাস্টোর উপযোগী হতে পারে যদি আপনার অ্যাপ্লিকেশনটি একটি ডাটাবেসের মান বজায় রাখে বা মানগুলি ডিভাইস-নির্দিষ্ট হয়, যেমনটি নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে।
ডেটাস্টোর বাস্তবায়ন করুন
একটি কাস্টম ডেটাস্টোর বাস্তবায়ন করতে, একটি ক্লাস তৈরি করুন যা PreferenceDataStore
প্রসারিত করে। নিম্নলিখিত উদাহরণটি একটি ডেটাস্টোর তৈরি করে যা String
মানগুলি পরিচালনা করে:
কোটলিন
class DataStore : PreferenceDataStore() { override fun putString(key: String, value: String?) { // Save the value somewhere. } override fun getString(key: String, defValue: String?): String? { // Retrieve the value. } }
জাভা
public class DataStore extends PreferenceDataStore { @Override public void putString(String key, @Nullable String value) { // Save the value somewhere. } @Override @Nullable public String getString(String key, @Nullable String defValue) { // Retrieve the value. } }
ইউজার ইন্টারফেস ব্লক করা এড়াতে মূল থ্রেড থেকে যেকোন সময় সাপেক্ষ অপারেশন চালান। যেহেতু একটি মান বজায় রাখার সময় ডেটাস্টোর ধারণকারী Fragment
বা Activity
ধ্বংস করা সম্ভব, তাই ডেটাটিকে সিরিয়ালাইজ করুন যাতে আপনি ব্যবহারকারীর দ্বারা পরিবর্তিত কোনো মান হারাবেন না।
ডেটাস্টোর সক্রিয় করুন
আপনি আপনার ডেটাস্টোর বাস্তবায়ন করার পরে, নতুন ডেটাস্টোর onCreatePreferences()
সেট করুন যাতে Preference
বস্তুগুলি ডিফল্ট SharedPreferences
ব্যবহার করার পরিবর্তে ডেটাস্টোরের সাথে মান বজায় রাখে। আপনি প্রতিটি Preference
বা সমগ্র অনুক্রমের জন্য একটি ডেটাস্টোর সক্ষম করতে পারেন।
একটি নির্দিষ্ট Preference
জন্য একটি কাস্টম ডেটাস্টোর সক্ষম করতে, Preference
উপর setPreferenceDataStore()
কল করুন, নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
কোটলিন
val preference: Preference? = findPreference("key") preference?.preferenceDataStore = dataStore
জাভা
Preference preference = findPreference("key"); if (preference != null) { preference.setPreferenceDataStore(dataStore); }
একটি সম্পূর্ণ অনুক্রমের জন্য একটি কাস্টম ডেটাস্টোর সক্ষম করতে, PreferenceManager
এ setPreferenceDataStore()
এ কল করুন:
কোটলিন
val preferenceManager = preferenceManager preferenceManager.preferenceDataStore = dataStore
জাভা
PreferenceManager preferenceManager = getPreferenceManager(); preferenceManager.setPreferenceDataStore(dataStore);
একটি নির্দিষ্ট Preference
জন্য সেট করা একটি ডেটাস্টোর সংশ্লিষ্ট শ্রেণিবিন্যাসের জন্য সেট করা যেকোনো ডেটাস্টোরকে ওভাররাইড করে। বেশিরভাগ ক্ষেত্রে, আপনি পুরো অনুক্রমের জন্য একটি ডেটাস্টোর সেট করেন।