সেভ করা পছন্দ সংক্রান্ত ভ্যালু ব্যবহার করুন   Android Jetpack-এর অংশ।

এই ডকুমেন্ট বর্ণনা করে যে কীভাবে Preference ভ্যালু স্টোর ও ব্যবহার করতে হয় যা পছন্দ লাইব্রেরি দ্বারা সেভ করা হয়।

পছন্দ সংক্রান্ত ডেটা স্টোরেজ

এই বিভাগে বর্ণনা করা হয়েছে যে কীভাবে Preference ডেটা সেভ করে রাখতে পারে।

SharedPreferences

ডিফল্ট হিসেবে, Preference ভ্যালু সেভ করতে SharedPreferences ব্যবহার করে। SharedPreferences API, অ্যাপ্লিকেশন সেশন জুড়ে সেভ করা ফাইল থেকে সাধারণ কী-ভ্যালু পেয়ার রিড ও রাইট করার সুবিধা দেয়। পছন্দের লাইব্রেরি একটি ব্যক্তিগত SharedPreferences ইনস্ট্যান্স ব্যবহার করে যাতে শুধুমাত্র আপনার অ্যাপ্লিকেশন এটি অ্যাক্সেস করতে পারে।

উদাহরণ হিসেবে, নিম্নলিখিত বিষয়গুলি ধরে নিন SwitchPreferenceCompat:

<SwitchPreferenceCompat
        app:key="notifications"
        app:title="Enable message notifications"/>

ব্যবহারকারী এই সুইচ টগল করে "চালু" করলে, SharedPreferences ফাইল "notifications" : "true"-এর কী-ভ্যালু পেয়ারের সাথে আপডেট হয়। Preference-এর জন্য সেট করা 'কী' এবং ব্যবহার করা 'কী' একই।

SharedPreferences API সম্পর্কে আরও তথ্যের জন্য, কী-ভ্যালু ডেটা সেভ করুন দেখুন।

Android-এ ডেটা স্টোর করার বিভিন্ন উপায় সম্পর্কে জানতে, ডেটা ও ফাইল স্টোরেজ ওভারভিউ দেখুন।

PreferenceDataStore

যদিও ডিফল্ট হিসেবে প্রেফারেন্স লাইব্রেরি SharedPreferences-এর সাথে ডেটা বজায় রাখে, SharedPreferences সবসময় আদর্শ সমাধান নয়। যেমন, আপনার অ্যাপ্লিকেশনে ব্যবহারকারীকে সাইন-ইন করতে হলে, আপনি হয়ত ক্লাউডে অ্যাপ্লিকেশন সেটিংস সেভ করে রাখতে চাইবেন যাতে অন্যান্য ডিভাইস ও প্ল্যাটফর্মেও সেটিংস দেখা যায়। একইভাবে, আপনার অ্যাপ্লিকেশনে ডিভাইস-নির্দিষ্ট কনফিগারেশন বিকল্প থাকলে, ডিভাইসের প্রতিটি ব্যবহারকারীর আলাদা সেটিংস থাকে, যা SharedPreferences-কে একটি আদর্শ সমাধান থেকে কম করে তোলে।

PreferenceDataStore আপনাকে Preference ভ্যালু বজায় রাখতে কাস্টম স্টোরেজ ব্যাকএন্ড ব্যবহার করতে দেয়। আরও তথ্যের জন্য, কাস্টম ডেটাস্টোর ব্যবহার করুন বিকল্প দেখুন।

পছন্দের ভ্যালু পড়ুন

ব্যবহার করা হচ্ছে এমন SharedPreferences অবজেক্ট ফিরিয়ে আনতে, PreferenceManager.getDefaultSharedPreferences() কল করুন। যদিও এই পদ্ধতি আপনার অ্যাপ্লিকেশনের যেকোনও জায়গা থেকে কাজ করে, আমরা সাজেস্ট করি যে আপনি নিজের অ্যাপকে লেয়ারে ভাগ করুন। আরও তথ্যের জন্য, ডেটা লেয়ার দেখুন।

যেমন, "signature"-এর কী সহ EditTextPreference দেওয়া হয়েছে, নিম্নলিখিতভাবে:

<EditTextPreference
        app:key="signature"
        app:title="Your signature"/>

আপনি এই Preference-এর জন্য সেভ করা ভ্যালু গ্লোবালি ফিরিয়ে আনতে পারবেন, এইভাবে:

Kotlin

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-এর ভ্যালুতে বাকি থাকা পরিবর্তন শুনতে পারবেন। তারপর, পরিবর্তন হয়েছে কিনা তা আপনি যাচাই করতে পারবেন। যেমন, নিম্নলিখিত কোড থেকে বোঝা যায় যে "name"-এর কী সহ EditTextPreference-এর ভ্যালুতে পরিবর্তন কীভাবে লক্ষ্য করতে হয়:

Kotlin

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()-এর সাথে সেট করতে হবে, এইভাবে:

Kotlin

preference.onPreferenceChangeListener = ...

জাভা

preference.setOnPreferenceChangeListener(...);

OnSharedPreferenceChangeListener প্রয়োগ করুন

SharedPreferences ব্যবহার করে Preference ভ্যালু পারসিস্ট করার সময়, আপনি পরিবর্তন শোনার জন্য SharedPreferences.OnSharedPreferenceChangeListener-ও ব্যবহার করতে পারবেন। আপনার Preference-এর মাধ্যমে সেভ করা ভ্যালু পরিবর্তন হলে, এটি আপনাকে শুনতে দেয়, যেমন, সার্ভারের সাথে সেটিংস সিঙ্ক করার সময়। "name"-এর কী সহ EditTextPreference-এর ভ্যালুতে পরিবর্তন কীভাবে শুনতে হয় তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

Kotlin

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() ব্যবহার করে লিসেনার রেজিস্টার করুন, নিম্নলিখিতভাবে:

Kotlin

preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(...)

জাভা

getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(...);

Kotlin

    val listener: SharedPreferences.OnSharedPreferenceChangeListener =
            SharedPreferences.OnSharedPreferenceChangeListener {...}
    

জাভা

    SharedPreferences.OnSharedPreferenceChangeListener listener =
            new SharedPreferences.OnSharedPreferenceChangeListener() {...}
    

আপনার Activity বা Fragment-এ সঠিক লাইফসাইকেল ম্যানেজমেন্টের জন্য, onResume() এবং onPause() কলব্যাকে এই লিসেনার রেজিস্টার এবং আনরেজিস্টার করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

Kotlin

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টি ভ্যালু ম্যানেজ করে:

Kotlin

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() কল করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

Kotlin

val preference: Preference? = findPreference("key")
preference?.preferenceDataStore = dataStore

জাভা

Preference preference = findPreference("key");
if (preference != null) {
    preference.setPreferenceDataStore(dataStore);
}

সম্পূর্ণ অনুক্রমের জন্য কাস্টম ডেটাস্টোর চালু করতে, PreferenceManager-এ setPreferenceDataStore() কল করুন:

Kotlin

val preferenceManager = preferenceManager
preferenceManager.preferenceDataStore = dataStore

জাভা

PreferenceManager preferenceManager = getPreferenceManager();
preferenceManager.setPreferenceDataStore(dataStore);

নির্দিষ্ট Preference-এর জন্য সেট করা ডেটাস্টোর, সংশ্লিষ্ট হায়ারার্কির জন্য সেট করা যেকোনও ডেটাস্টোরকে ওভাররাইড করে। বেশিরভাগ ক্ষেত্রে, আপনি সম্পূর্ণ হায়ারার্কির জন্য একটি ডেটাস্টোর সেট করেন।