میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

پیاده سازی Loader اختصاصی در اندروید

با سلام خدمت همه دوستان در تمرین زیر یک کلاس loader اختصاصی برای بارگذاری و مدیریت جفت های کلید-مقدار ( preferences ) پیاده سازی خواهیم کرد.با هر بار بارگذاری (load) مقدار preference افزایش می یابد.

 


پیاده سازی Loader اختصاصی در اندروید

یک پروژه ی جدید به نام com.Vogella.android.loader.preferences و همچنین یک activity جدید به نام MainActivity ایجاد نمایید.

با تعریف کلاس زیر که یک پیاده سازی اختصاصی از AsyncTaskLoader هست شما در واقع جفت های کلید-مقدار (shared preferences) را به صورت ناهمگام مدیریت می نمایید ( shared preferences برای ذخیره ی کلید/مقدارهای کوچک بکار می رود تا برای مثال با بسته شدن اپلیکیشن یا خاموش شدن دستگاه اطلاعات مربوطه همچون تنظیمات اپلیکیشن از دست نرود.)

 

package com.vogella.android.loader.preferences;
import android.content.AsyncTaskLoader;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
public class SharedPreferencesLoader extends AsyncTaskLoader<SharedPreferences>
implements SharedPreferences.OnSharedPreferenceChangeListener {
private SharedPreferences prefs = null;
public static void persist(final SharedPreferences.Editor editor) {
editor.apply();
}
public SharedPreferencesLoader(Context context) {
super(context);
}
// Load the data asynchronously
@Override
public SharedPreferences loadInBackground() {
prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
prefs.registerOnSharedPreferenceChangeListener(this);
return (prefs);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// notify loader that content has changed
onContentChanged();
}
/**
* starts the loading of the data
* once result is ready the onLoadFinished method is called
* in the main thread. It loader was started earlier the result
* is return directly
* method must be called from main thread.
*/
@Override
protected void onStartLoading() {
if (prefs != null) {
deliverResult(prefs);
}
if (takeContentChanged() || prefs == null) {
forceLoad();
}
}
}

نمونه کد زیر استفاده از این loader را در کلاس activity به نمایش می گذارد.

 

package com.vogella.android.loader.preferences;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.LoaderManager;
import android.content.Loader;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity implements
LoaderManager.LoaderCallbacks<SharedPreferences> {
private static final String KEY = "prefs";
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.prefs);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<SharedPreferences> onCreateLoader(int id, Bundle args) {
return (new SharedPreferencesLoader(this));
}
@SuppressLint("CommitPrefEdits")
@Override
public void onLoadFinished(Loader<SharedPreferences> loader,
SharedPreferences prefs) {
int value = prefs.getInt(KEY, 0);
value += 1;
textView.setText(String.valueOf(value));
// update value
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(KEY, value);
SharedPreferencesLoader.persist(editor);
}
@Override
public void onLoaderReset(Loader<SharedPreferences> loader) {
// NOT used
}
}

پس از هر بار تغییر در نحوه ی پیکربندی/تنظیمات اپلیکیشن ، کلاس LoaderManager متد () onLoadFinished را به صورت خودکار در activity صدا می زند. اپلیکیشن را اجرا نموده و مطمئن شوید که با هر بار تغییر در نحوه ی پیکربندی (config change) مقدار ذخیره شده در shared preferences افزایش می یابد

 


امیدواریم آموزش پیاده سازی کلاس Loader اختصاصی در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟