روزنوشت

می نویسم؛ تا به یاد آورم روزی، بودم

روزنوشت

می نویسم؛ تا به یاد آورم روزی، بودم

روزنوشت

من آرزویی ندارم، من از چیزی نمی‌ترسم، من آزادم...

«کازانتزاکیس»

دنبال کنندگان ۳ نفر
این وبلاگ را دنبال کنید
آخرین نظرات

بعضی وقتا نیاز هست که یک عملیاتی در اولین اجرای اکتیویتی (Activity) صورت بگیره، بعنوان مثال در شرایطی که قصد دارید برای اولین بار یک راهنما رو در اکتیویتی نشون بدید.

 

اولین روشی که به ذهنتون خواهد رسید استفاده از SharedPreferences هست. SharedPreferences روشی ساده و کم هزینه برای ذخیره‌ی تنظیمات برنامه هست.

 

این تکه کد کلیدی حاوی داده ای از جنس Boolean در SharedPreferences ذخیره می‌کنه، درصورتی که کلید وجود نداشته باشه مقدار true رو برمی‌گردونه و درصورت وجود، مقدار واقعی ذخیره شده در این کلید.

SharedPreferences settings = getSharedPreferences("MY_PREFERENCES", 0);
final boolean ret = settings.getBoolean("activity.firstVisit", true);

if (ret) {
    Editor editor = settings.edit();
    editor.putBoolean("activity.firstVisit", false);
    editor.commit();
    
    // FIRST TIME
    // YOUR CODES GOES HERE
}

 

اگر فقط در یک اکتیویتی نیاز به چک کردن این موضوع داشته باشید، همین روش استفاده شده مناسب هست و شلوغی زیادی هم نداره

اما اگر نیاز باشه در چندین اکتیویتی مختلف این موضوع بررسی بشه و بر اساس اون عملیاتی انجام بشه میشه کدها رو مرتب تر کرد و از شلوغی کدها جلوگیری کرد

من عادت دارم در پروژه کلاسی مجزا ایجاد کنم که متدهایی که عمومی هستن و در کل پروژه بهشون نیاز هست رو اونجا قرار میدم. و بسته به نیازهای پروژه سعی می کنم متدها رو استاتیک تعریف کنم.

 

در این مورد هم می‌تونیم کلاسی ایجاد کنیم و این قسمت از منطق برنامه رو به کلاس مذکور منتقل کنیم. بنا به عادت اسم این کلاس رو Utils می‌زارم.

public class Utils {

    public static boolean isActivityVisitedForFirstTime(Context context) {

        SharedPreferences settings = context.getSharedPreferences("MY_PREFERENCES", 0);
        final boolean ret = settings.getBoolean(context.getClass().getName()
                + ".firstVisit", true);
        if (ret) {
            Editor editor = settings.edit();
            editor.putBoolean(context.getClass().getName() + ".firstVisit", false);
            editor.commit();
        }
        return ret;
    }

}

ما اینجا در کلاس Utils، متدی static تعریف کردیم که با هربار صدا زدنش در هر اکتیویتی، چک میکنه که آیا اون اکتیویتی اولین بار هست که اجرا میشه یا خیر، درواقع ما از اسم کامل هر اکتیویتی بعنوان کلید استفاده می کنیم که باعث میشه در هر اکتیویتی فقط یه متد رو صدا بزنیم و بقیه ی مسائل پنهان میشه

 

نکته ای که نیاز هست بهش توجه بشه این هست که بعضی متدها، مثل getSharedPreferences(...) در محدوده ی Activity در دسترس هستن، یعنی اگر کلاس از جنس Activity نباشه، این متدها در دسترس نخواهند بود، برای همین نیاز هست شئ ای از جنس Context برای این متد (یا کلاس در بردارنده ی متد) ارسال بشه تا بتونه با Activity ی که متد رو صدا زده در ارتباط باشه

نمونه ی استفاده:

if (Utils.isActivityVisitedForFirstTime(this)) {
    doSomething();
}

اگر هم نیازهای پروژه به شکلی بود که احساس کردید static تعریف کردن همه ی متدها دردسرش زیاده، میتونید متدها رو از حالت استاتیک خارج کنید و درعوض در سازنده‌ی (Constructor) کلاس متغیرهای سراسری رو مقداردهی کنید

public class Utils {
    private final Context context;

    private Editor editor;
    private final SharedPreferences settings;

    public Utils(Context context) {
        this.context = context;
        settings = context.getSharedPreferences("MY_PREFERENCES", 0);
    }

    public boolean isActivityVisitedForFirstTime() {
        final boolean ret = settings.getBoolean(context.getClass().getName()
                + ".firstVisit", true);
        if (ret) {
            editor = settings.edit();
            editor.putBoolean(context.getClass().getName() + ".firstVisit", false);
            editor.commit();
        }
        return ret;
    }

}

 

نمونه ی استفاده از این متد (و کلاس):

Utils utils = new Utils(this);

if (utils.isActivityVisitedForFirstTime()) {
    doSomething();
}

نظرات (۳)

سلام
 دستتون درد نکنه خیلی کمک کرد
ممنون
پاسخ:
خواهش می کنم.
خوشحالم که براتون مفید بوده :)
هر کدی رو که در متد oncreate اکتیویتی قرار بدیم ، (مادامی که اون اکتیویتی destroy نشده باشه )  فقط یک بار اجرا میشه 
پاسخ:
درواقع هدف این هست که تنها در اولین باری که اکتیویتی اجرا میشه، تکه کدی اجرا بشه و در دفعات بعد نادیده گرفته بشه. مثلاً در اولین اجرا پس از نصب یک راهنما رو نمایش بدیم و در دفعات بعد، نمایش داده نشه.
مرسی عالی بود
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی