0

کار با Activity ها ، در برنامه نویسی اندروید

 
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر
شنبه 17 مرداد 1394  6:01 PM
تشکرات از این پست
ali_kamali
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

رفتن به Activity جدید، با استفاده از روش Intent ، در برنامه نویسی اندروید

رای رفتن به یک Activity جدید (شروع یک Activity جدید)، با استفاده از روش Intent ، کدهای زیر را می نویسیم :

startActivity(new Intent(Activity1.this, Activity2.class));

که در آن، Activity1 ، نام activity فعلی و Activity2 ، نام activity است که قصد داریم وارد آن بشویم.

دقت کنید که برای خلاصه نویسی، کدها را به صورت بالا (در یک خط) نوشته ایم، در صورتی که بخواهیم مرحله ساخت Intent در خطی جداگانه نوشته شود، کدها به صورت زیر خواهند بود :


Intent intent = new Intent(Activity1.this, Activity2.class);
startActivity(intent);

 

شنبه 17 مرداد 1394  6:02 PM
تشکرات از این پست
mtk_designer
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

رفتن به activity جدید، با استفاده از یک رشته (تعریف نام activity با رشته)، در برنامه نویسی اندروید

روش عادی برای رفتن از یک activity به activity دیگر به صورت زیر می باشد :


startActivity(new Intent(CurrentActivity.this, NextActivity.class));

که در آن، CurrentActivity برابر نام activity فعلی (همان activity که در آن هستیم) و NextActivity ، برابر آن activity است که قصد داریم وارد آن شویم.

اما ممکن است که بخواهیم نام activity که قرار است به آن برویم را با یک رشته (string) تعریف کرده و سپس بر اساس آن رشته، وارد activity بشویم، زیرا اینگونه کد نوشتن، آزادی عمل بیشتری به ما می دهد و برای نوشتن برخی برنامه ها، لازم می شود (البته تا مجبور نشده اید، از آن استفاده نکنید، تا حجم کدهایتان زیاد نشود). برای این منظور، کدهای زیر را می نویسیم :


String StringClass = "com.kelidestan.example.NextActivity";
Class<?> c = null;
if(StringClass != null) {
    try {
        c = Class.forName(StringClass);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}
Intent intent = new Intent(CurrentActivity.this, c);
startActivity(intent);

که در آن، CurrentActivity برابر نام activity فعلی (همان activity که در آن هستیم) و NextActivity ، برابر آن activity است که قصد داریم وارد آن شویم.

در کدهای بالا، به عبارت نوشته شده برای رشته StringClass توجه کنید (در این رشته، نام activity را مشخص کرده ایم) :


com.kelidestan.example.NextActivity

مشاهده می کنید که نام package برنامه اندروید را قبل از نام activity مورد نظرمان که می خواهیم به آن وارد شویم (یعنی NextActivity)، نوشته ایم. در کد بالا، ما نام package را برابر com.kelidestan.example گرفته ایم و شما باید آن را به نام package مورد نظر خود، تغییر بدهید.

شنبه 17 مرداد 1394  6:04 PM
تشکرات از این پست
ali_kamali mtk_designer mty1378
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

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

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

برای ارسال مقدار از Activity فعلی، روش putExtra به کار می رود. بهتر است ابتدا شکل کلی آن را بیان کنیم و بعد به صورت جداگانه، شیوه استفاده از آن برای انواع متغیرها (رشته، عدد و ...) را شرح بدهیم. شیوه کلی استفاده از روش putExtra ، به صورت زیر می باشد :


intent.putExtra(key, value);

که در آن، intent ، یک شیء (object) از نوع Intent می باشد (یک شیء که از کلاس Intent ساخته شده)(که از آن برای رفتن به Activity بعدی استفاده می کنیم). key باید به صورت یک رشته باشد که نامی منحصربفرد (انتخاب به دلخواه) برای دریافت مقدار در Activity بعدی می باشد (زیرا ممکن است چندین مقدار را ارسال کنیم و بنابراین باید هر کدام، یک نام منحصربفرد (key) داشته باشند تا بتوانیم آنها را به صورت جداگانه دریافت کنیم). value نیز همان مقداری است که می خواهیم به Activity بعدی ارسال شود.

ارسال یک مقدار از نوع رشته (String) :

درون Activity اول، کدهای زیر را می نویسیم :


Intent intent = new Intent(getApplicationContext(), NewActivity.class);
String myVariable_1 = "value";
intent.putExtra("key_name", myVariable_1);
startActivity(intent);

دقت کنید که NewActivity ، نام Activity جدیدی است که وارد آن خواهیم شد و اطلاعات به آن ارسال می گردد.

سپس درون Activity دوم، باید کدهای زیر را بنویسیم :


Bundle extras = getIntent().getExtras();
if (extras != null) {
    String myVariable_2 = extras.getString("key_name");
}

البته شرط if را می توان برداشت. در رشته (String) با نام myVariable_2 ، مقدار مورد نظرمان ذخیره شده است.

نکته :

اگر مقدار مورد نظر، یک عدد بوده است (یعنی یک عدد را در رشته ذکر کرده ایم، نه اینکه از جنس int باشد، برای int ، در ادامه توضیحاتی داده شده است)، می توانید از کد زیر، برای تبدیل رشته (string) به عدد، استفاده کنید :


int myVariable_2_new = Integer.parseInt(myVariable_2);

نکته :

قبل از دریافت مقدار، می توانیم چک کنیم که آیا اصلا مقداری با آن نام ارسال شده است یا خیر (با دستور if) :


Bundle extras = getIntent().getExtras();
if (extras != null) {
    if(extras.containsKey("key_name")){
        String myVariable_2 = extras.getString("key_name");
    }
}

ارسال یک مقدار از نوع عدد (int) :

درون Activity اول، کدهای زیر را می نویسیم :


Intent intent = new Intent(getApplicationContext(), NewActivity.class);
int myVariable_1 = 1;
intent.putExtra("key_name", myVariable_1);
startActivity(intent);

دقت کنید که NewActivity ، نام Activity جدیدی است که وارد آن خواهیم شد و اطلاعات به آن ارسال می گردد.

سپس درون Activity دوم، باید کدهای زیر را بنویسیم :


Bundle extras = getIntent().getExtras();
if (extras != null) {
    int myVariable_2 = extras.getInt("key_name");
}

البته شرط if را می توان برداشت. در متغیر با نام myVariable_2 (که از نوع int می باشد)، مقدار مورد نظرمان ذخیره شده است.

ارسال یک مقدار از نوعی غیر از رشته (String) یا عدد (int) :

همان طور که مشاهده کردید، در Activity دوم، برای دریافت رشته (String)، از روش getString و برای دریافت عدد (int)، از روش getInt استفاده شد. بنابراین برای هر نوع متغیر، باید تنها روش (method) مربوط به آن را بدانیم. برای پیدا کردن این روش، در برنامه eclipse ، نشانگر موس را بعد از عبارت extras.get برده (کلیک می کنیم تا نشانگر در آنجا قرار بگیرد) و کلیدهای Ctrl و Space را به صورت همزمان از کیبورد فشار می دهیم تا تمامی روش های قابل انتخاب، نمایش داده شوند :

ارسال یک مقدار تنها (رشته یا عدد یا ...) از یک Activity به Activity دیگر، در برنامه نویسی اندروید
شنبه 17 مرداد 1394  6:05 PM
تشکرات از این پست
mtk_designer mty1378
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

ارسال یک آرایه (Array) (از نوع رشته یا عدد یا ...) از یک Activity به Activity دیگر، در برنامه نویسی

برای ارسال مقدار از Activity فعلی، روش putExtra به کار می رود. بهتر است ابتدا شکل کلی آن را بیان کنیم و بعد به صورت جداگانه، شیوه استفاده از آن برای انواع متغیرها (رشته، عدد و ...) را شرح بدهیم. شیوه کلی استفاده از روش putExtra ، به صورت زیر می باشد :


intent.putExtra(key, value);

که در آن، intent ، یک شیء (object) از نوع Intent می باشد (یک شیء که از کلاس Intent ساخته شده)(که از آن برای رفتن به Activity بعدی استفاده می کنیم). key باید به صورت یک رشته باشد که نامی منحصربفرد و انتخابی برای دریافت مقدار در Activity بعدی می باشد (زیرا ممکن است چندین مقدار را ارسال کنیم و بنابراین باید هر کدام، یک نام منحصربفرد (key) داشته باشند تا بتوانیم آنها را به صورت جداگانه دریافت کنیم). value نیز همان مقداری است که می خواهیم به Activity بعدی ارسال شود.

ارسال یک آرایه (Array) از نوع رشته (String) :

درون Activity اول، کدهای زیر را می نویسیم :


String myArray_1[] = {"ali","hamed","reza"};
Intent intent = new Intent(getApplicationContext(), NewActivity.class);
intent.putExtra("key_name", myArray_1);
startActivity(intent);

دقت کنید که NewActivity ، نام Activity جدیدی است که وارد آن خواهیم شد و اطلاعات به آن ارسال می گردد.

سپس درون Activity دوم، باید کدهای زیر را بنویسیم :


Bundle extras = getIntent().getExtras();
if (extras != null) {
    String[] myArray_2 = extras.getStringArray("key_name");
}

البته شرط if را می توان برداشت. در رشته (String) با نام myVariable_2 ، مقدار مورد نظرمان ذخیره شده است.

نکته :

قبل از دریافت مقدار، می توانیم چک کنیم که آیا اصلا مقداری با آن نام ارسال شده است یا خیر (با دستور if) :


Bundle extras = getIntent().getExtras();
if (extras != null) {
    if(extras.containsKey("key_name")){
        String[] myArray_2 = extras.getStringArray("key_name");
    }
}

ارسال یک آرایه (Array) از نوع عدد (int) :

درون Activity اول، کدهای زیر را می نویسیم :


int myArray_1[] = {1,2,3};
Intent intent = new Intent(getApplicationContext(), NewActivity.class);
intent.putExtra("key_name", myArray_1);
startActivity(intent);

دقت کنید که NewActivity ، نام Activity جدیدی است که وارد آن خواهیم شد و اطلاعات به آن ارسال می گردد.

سپس درون Activity دوم، باید کدهای زیر را بنویسیم :


Bundle extras = getIntent().getExtras();
if (extras != null) {
    int[] myArray_2 = extras.getIntArray("key_name");
}

البته شرط if را می توان برداشت. در متغیر با نام myVariable_2 (که از نوع int می باشد)، مقدار مورد نظرمان ذخیره شده است.

ارسال یک آرایه (Array) از نوعی غیر از رشته (String) یا عدد (int) :

همان طور که مشاهده کردید، در Activity دوم، برای دریافت رشته (String)، از روش getStringArray و برای دریافت عدد (int)، از روش getIntArray استفاده شد. بنابراین برای هر نوع متغیر، باید تنها روش (method) مربوط به آن را بدانیم. برای پیدا کردن این روش، در برنامه eclipse ، نشانگر موس را بعد از عبارت extras.get برده (کلیک می کنیم تا نشانگر در آنجا قرار بگیرد) و کلیدهای Ctrl و Space را به صورت همزمان از کیبورد فشار می دهیم تا تمامی روش های قابل انتخاب، نمایش داده شوند :

ارسال یک آرایه (Array) (از نوع رشته یا عدد یا ...) از یک Activity به Activity دیگر، در برنامه نویسی اندروید
شنبه 17 مرداد 1394  6:06 PM
تشکرات از این پست
mtk_designer mty1378
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

تغییر Activity اصلی برنامه اندروید (تغییر اولین Activity که در شروع برنامه اندروید، نمایش داده می شو

در این مبحث، چگونگی تغییر دادن Activity اصلی برنامه اندروید را شرح می دهیم. منظور از Activity اصلی، همان Activity است که با اجرای برنامه اندروید، به عنوان اولین Activity به کاربر نمایش داده می شود.

فرض کنید که پروژه اندرویدی ساخته ایم که دارای دو Activity با نام های MainActivity و SecondActivity می باشد :

تغییر Activity اصلی برنامه اندروید (تغییر اولین Activity که در شروع برنامه اندروید، نمایش داده می شود)

اکنون فایل AndroidManifest.xml از پروژه اندروید را باز می کنیم :

تغییر Activity اصلی برنامه اندروید (تغییر اولین Activity که در شروع برنامه اندروید، نمایش داده می شود)

کدهای فایل AndroidManifest.xml به صورت زیر می باشند :


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kelidestan.com"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.kelidestan.com.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.kelidestan.com.SecondActivity"
            android:label="@string/title_activity_second" >
        </activity>
    </application>

</manifest>

تگ (tag) با نام activity برای تعریف یک Activity به کار می رود و چون در پروژه اندروید، دو Activity داریم، بنابراین تگ activity نیز دو بار به کار رفته است :


        <activity
            android:name="com.kelidestan.com.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.kelidestan.com.SecondActivity"
            android:label="@string/title_activity_second" >
        </activity>

چون در Activity با نام MainActivity ، کدهای زیر به کار رفته است، بنابراین MainActivity همان Activity اصلی برنامه اندروید می باشد :


<intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

این کدها باعث می شوند که هنگام اجرای برنامه اندروید، MainActivity به عنوان Activity اصلی برنامه اندروید شناسایی شود. بنابراین چنانچه قصد داریم که Activity با نام SecondActivity به عنوان Activity اصلی برنامه اندروید در نظر گرفته شود، باید این کدها را از تگ activity مربوط به MainActivity برداشته و در تگ activity مربوط به SecondActivity قرار بدهیم یا روش راحتتر این است که نام های MainActivity و SecondActivity را با هم تعویض کنیم (اینگونه حجم تغییرات لازم، کمتر است و همچنین چون label برای MainActivity برابر @string/app_name تعیین شده است، دیگر نیازی به تغییر آن نیست، زیرا @string/app_name اشاره به نام برنامه اندروید دارد که در فایل strings.xml از پروژه اندروید تعریف شده و این نام را معمولا برای Activity اصلی برنامه اندروید به کار می برند).

بنابراین مثلا نام های MainActivity و SecondActivity را با هم تعویض می کنیم تا SecondActivity به Activity اصلی برنامه اندروید تبدیل شود (در صورت تمایل، شما می توانید یکی از مشخصه های label را هم تغییر بدهید) :


        <activity
            android:name="com.kelidestan.com.SecondActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.kelidestan.com.MainActivity"
            android:label="@string/title_activity_second" >
        </activity>

بنابراین کل کدهای فایل AndroidManifest.xml به صورت زیر خواهد بود :


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kelidestan.com"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.kelidestan.com.SecondActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.kelidestan.com.MainActivity"
            android:label="@string/title_activity_second" >
        </activity>
    </application>

</manifest>

پس از اعمال این تغییرات، با اجرای برنامه اندروید، SecondActivity به عنوان Activity اصلی برنامه اندروید، در شروع برنامه نمایش داده می شود.

شنبه 17 مرداد 1394  6:08 PM
تشکرات از این پست
mtk_designer mty1378
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

تغییر عنوان (title) مربوط به Activity ها، در برنامه نویسی اندروید

همان طور که می دانید، در برنامه اندروید، هر Activity دارای یک عنوان (title) است. مثلا اگر قالب (theme) برنامه اندروید را به گونه ای انتخاب کرده باشیم که action bar نمایش داده شود، آنگاه درون action bar ، عنوان (title) مربوط به Activity را می توانیم ببینیم :

آموزش برنامه نویسی اندروید

اکنون می خواهیم شرح بدهیم که چگونه می توان عنوان (title) مربوط به یک Activity را تغییر داد. برای این منظور، ابتدا باید فایل AndroidManifest.xml را باز کنیم. مثلا برای یک پروژه اندروید دلخواه که دارای دو Activity می باشد، کدهای فایل AndroidManifest.xml را به صورت زیر فرض می کنیم :


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kelidestan.com"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.kelidestan.com.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.kelidestan.com.Activity2"
            android:label="@string/title_activity_activity2" >
        </activity>
    </application>

</manifest>

همان طور که مشاهده می کنید، دو Activity ، با استفاده از دو تگ activity تعریف شده اند. مثلا کدهای مربوط به یکی از آنها، به صورت زیر می باشد ، :


<activity
    android:name="com.kelidestan.com.Activity2"
    android:label="@string/title_activity_activity2" >
</activity>

در کد مربوط به تعریف این Activity ، یک مشخصه با نام label داریم که برای تعیین عنوان (title) مربوط به Activity می باشد. برای این مشخصه، عبارت زیر نوشته شده است :


@string/title_activity_activity2

این عبارت، اشاره به یک رشته (String) تعریف شده در فایل strings.xml دارد. فایل strings.xml در پروژه اندروید، برای تعریف رشته ها (String) به کار می رود، بنابراین ما متن های مورد نظرمان را در آن به صورت رشته تعریف می کنیم و سپس بدین شکل، به آنها ارجاع می دهیم. بنابراین عنوان Activity مورد نظر، در یک رشته (String) با نام title_activity_activity2 در فایل strings.xml تعریف شده است، پس برای تغییر عنوان این Activity ، باید فایل strings.xml را باز کرده و رشته (String) مورد نظر را تغییر بدهیم.

موقعیت فایل strings.xml در پروژه اندروید، به صورت زیر می باشد :

آموزش برنامه نویسی اندروید
شنبه 17 مرداد 1394  6:09 PM
تشکرات از این پست
mtk_designer mty1378
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

چرخه (lifecycle) یک activity ، در برنامه اندروید

برای داشتن درک درستی از چرخه (lifecycle) یک activity ، شکل زیر را مشاهده نمایید :

آموزش برنامه نویسی اندروید

بنابراین، در چرخه یک activity ، روش های onCreate() و onStart() و onRestart() و onResume() و onPause() و onStop() و onDestroy() ، هر یک نقش خاص خود را دارند.

به کدهای زیر توجه کنید :


public class Activity extends ApplicationContext {  
       
    protected void onCreate(Bundle savedInstanceState);  
       
    protected void onStart();  
       
    protected void onRestart();  
       
    protected void onResume();  
       
    protected void onPause();  
       
    protected void onStop();
   
    protected void onDestroy();  
   
}

با افزودن کدهای دلخواه، به بخش های مختلف چرخه activity ها، می توانیم ویژگی های برنامه اندروید خود را به خوبی تعریف کنیم.

شنبه 17 مرداد 1394  6:10 PM
تشکرات از این پست
mty1378
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

وقتی در برنامه اندروید، از یک Activity ، وارد Activity دیگر می شویم، چه اتفاقی برای Activity قبلی می

یکی از اصول اولیه برنامه های اندروید این است که ما از یک Activity به Activity دیگر وارد می شویم و هر بار با یک Activity سر و کار داریم. مثلا در یک Activity ، یک عنصر دکمه (Button) قرار می دهیم که با اشاره کاربر بر روی آن، به یک Activity دیگر وارد شویم. اما در این حالت، چه اتفاقی برای Activity قبلی که دیگر آن را نمی بینیم می افتد ؟ این را می دانیم که در اکثر مواقع (در ادامه متوجه می شوید که چرا نمی گوییم همیشه)، با اشاره بر روی دکمه Back گوشی، به آن Activity قبلی برمی گردیم، اما در ادامه دلیل آن و چگونگی انجام آن را شرح خواهیم داد.

ابتدا بگذارید نگاهی به چرخه یک Activity بیندازیم :

وقتی در برنامه اندروید، از یک Activity ، وارد Activity دیگر می شویم، چه اتفاقی می افتد ؟

ما معمولا کدهای یک Activity را مشابه کدهای زیر می نویسیم (ساده ترین کد برای ساخت یک Activity) :


package com.kelidestan.com;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class NewActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.new_activity);
               
                // your codes
        }

}

همان طور که مشاهده می کنید، در ساده ترین شکل ممکن برای کدهای یک Activity ، تنها روش onCreate را داریم. در واقع با رفتن به یک Activity ، این روش onCreate است که اجرا می شود. بنابراین رابط گرافیکی متناظر با Activity به کاربر نمایش داده می شود و از این به بعد، اینکه چه کدی اجرا شود، بستگی به انتخاب های کاربر دارد. بنابراین کاربر انتخاب هایی مثل گزینه های موجود در خود رابط گرافیکی Activity و همچنین فشار دادن دکمه های گوشی را دارد.

فرض کنیم که در رابط گرافیکی Activity ، یک دکمه باشد که با اشاره کاربر بر روی آن، به یک Activity دیگر وارد شویم، اما برای این Activity چه اتفاقی می افتد ؟

با رفتن به یک Activity جدید، این Activity به حالت توقف موقتی (pause) یا حالت توقف کامل (stop) در می آید.

تفاوت بین دو حالت توقف موقتی (pause) و حالت توقف کامل (stop) :

اگر با شروع Activity جدید، بتوانیم بخشی از Activity قبلی را ببینیم، Activity قبلی در حالت pause قرار گرفته است، اما اگر نتوانیم بخشی از آن را ببینیم، Activity قبلی در حالت stop قرار گرفته است.

تعیین یک سری کد برای اجرا شدن در هنگام وقوع یکی از دو حالت توقف موقتی (pause) و حالت توقف کامل (stop) :

برای هر یک از دو حالت pause یا stop ، روش هایی (methods) در نظر گرفته شده است که با نوشتن کدهای آنها در میان کدهای Activity ، می توانیم تعیین کنیم که با وقوع هر یک از این دو حالت، یک سری کد اجرا شود. به عنوان مثال، برای حالت pause ، یک روش (method) با نام onPause در نظر گرفته شده است، یعنی اینکه با پیش آمدن حالت pause برای Activity ، کدهای موجود در این روش اجرا خواهند شد. روش onPause ، کدهایی مشابه کد زیر خواهد داشت :


        @Override
        protected void onPause() {
                // TODO Auto-generated method stub
                super.onPause();
               
                // your codes for pause
        }

و محل قرارگیری آن در میان کل کدهای Activity ، به صورت زیر می باشد :


package com.kelidestan.com;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class NewActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.new_activity);
               
                // your codes
        }

        @Override
        protected void onPause() {
                // TODO Auto-generated method stub
                super.onPause();
               
                // your codes for pause
        }
       
}

اما به کار بردن روش onPause اختیاری است و تنها آن را در صورتی به کار می بریم که بخواهیم هنگام pause شدن Activity ، یک سری کد اجرا شود. بنابراین بر اساس اینکه روش onPause در کدهای Activity نوشته شده باشد یا نه، دو حالت داریم که آنها را در ادامه شرح می دهیم :

حالت اول : روش onPause در Activity نوشته نشده باشد :

چنانچه در کدهای Activity ، روش onPause نوشته نشده باشد، بنابراین Activity به حالت pause می رود، به این صورت که دیگر قابل تعامل برای کاربر نیست و یک Activity در پس زمینه (background activity) می باشد. بنابراین عملیات های آن متوقف می شود تا حافظه (memory) به Activity فعلی (foreground activity) که در حال کار کردن با آن هستیم، اختصاص یابد.

زمانی که دوباره به آن Activity که یک Activity در پس زمینه (background activity) است، برمی گردیم (مثلا با اشاره بر روی دکمه Back گوشی)، عملیات resume برای Activity اجرا خواهد شد (نه عملیات create ، یعنی Activity از ابتدا اجرا نمی شود، بلکه ادامه اجرای کدهای آن را خواهیم داشت). اگر به عکس مربوط به چرخه Activity نگاهی بیندازید، مشاهده می کنید که یک روش هم با نام onResume برای عملیات resume پیش بینی شده است که می توانید کدهای مورد نظر خود را در آن بنویسید، ولی بیشتر به این نکته توجه داشته باشید که resume شدن، باعث اجرای دوباره روش onReume می شود، نه اجرای دوباره روش های onCreate و onStart .

دقت شود که چون روش onResume اجرا می شود، بنابراین باید ببینیم که اصلا کدی برای روش onResume در میان کدهای Activity نوشته شده است یا خیر. اگر کدی وجود داشته باشد، هنگام resume شدن Activity ، اجرا می شوند، اما اگر کدی وجود نداشته باشد، تنها همان حالت قبلی Activity و ادامه اجرای کدهای آن را خواهیم داشت.

حالت دوم : روش onPause در Activity نوشته شده باشد :

ابتدا کدهایی که در روش onPause از کدهای Activity نوشته ایم اجرا خواهد شد، سپس همان عملیات های مربوط به حالت اول که بیان کردیم، اجرا می شود (همان عملیات ها اجرا می شود).

نکته :

دو حالتی که برای عملیات pause ذکر کردیم، برای عملیات stop نیز به همین صورت خواهد بود (مشابه هستند)، با این تفاوت که به جای اجرای روش onPause ، اجرای روش onStop را خواهیم داشت و همچنین در صورت بازگشت به Activity ، روش هایی که در شکل زیر با فلش نمایش داده ایم، اجرا خواهند شد :

وقتی در برنامه اندروید، از یک Activity ، وارد Activity دیگر می شویم، چه اتفاقی برای Activity قبلی می افتد ؟

از دست رفتن وضعیت قبلی Activity قرار گرفته در حالت pause و یا حالت stop ، به دلیل کمبود حافظه (memory) گوشی :

گاهی اوقات که گوشی اندروید، از نظر حافظه (memory)، برای اجرای برنامه های با اولویت بالاتر، با مشکل روبرو می شود (حافظه کم می آورد)، آن Activity ای که می خواهد در یکی از دو حالت pause یا stop قرار بگیرد را به طور کامل می بندد (پردازش کل برنامه متوقف می شود)، به گونه ای که با رجوع بعدی کاربر به آن Activity ، از اول اجرا خواهد شد (یعنی شروع با اجرای روش onCreate و ادامه همان روند عادی). بنابراین در این حالت، وضعیت قبلی Activity از دست می رود. این مورد را در شکل زیر (شکل چرخه Activity) با دو علامت در کنار روش های onPause و onStop مشخص کرده ایم :

وقتی در برنامه اندروید، از یک Activity ، وارد Activity دیگر می شویم، چه اتفاقی می افتد ؟

در واقع، پس از اجرای روش onPause یا روش onStop ، اگر گوشی، حافظه را برای برنامه های با اولویت بالاتر نیاز داشته باشد، آن Activity را به طور کامل خواهد بست (پردازش کل برنامه متوقف می شود) و Activity در یکی از آن دو حالت pause یا stop قرار نمی گیرد.

مواردی که خودمان تعیین می کنیم که به آن Activity قبلی بازنگردیم :

گاهی اوقات نیز خودمان تعیین می کنیم که اگر از این Activity به Activity دیگری منتقل شدیم، دیگر کاربر نتواند به این Activity بازگردد. برخی از موارد مربوط به آن را ذکر می کنیم (فرض می کنیم که به حالت pause رفته است و مواردی که گفته می شود، برای حالت stop نیز مشابه است و تنها باید روش های مربوط به حالت stop و نکات آن را در نظر بگیرید) :

* در میان کدهای روش onPause در Activity قبلی، با یک سری کد، تعیین می کنیم که Activity قبلی به طور کامل بسته شود (یعنی destroy شدن Activity).

* در Activity بعدی، یک سری کد می نویسیم که عملکرد دکمه Back گوشی را در آن Activity تغییر بدهد، یعنی با اشاره کاربر بر روی دکمه Back گوشی، دیگر به Activity قبلی باز نمی گردیم، بلکه یک سری کد که خود کاربر تعیین کرده است، اجرا خواهد شد.

شنبه 17 مرداد 1394  6:12 PM
تشکرات از این پست
mty1378
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

بازگشت به یک Activity موجود در پس زمینه (که به حالت Stop یا Pause رفته)(یا به اصطلاح، Resume کردن یک

هنگامی که ما درون Activity جدید هستیم، اگر روش Intent را به شکل زیر به کار ببریم، یک اجرای جدید از آن Activity خواهیم داشت، یعنی دو اجرا از آن Activity در صف Activity ها قرار می گیرد :

Intent intent = new Intent(Activity_2.this, Activity_1.class);
startActivity(intent);

در کد بالا، Activity_2 را برابر نام Activity فعلی در نظر گرفته ایم و Activity_1 نیز نام Activity قبلی است که در آن بوده ایم و اکنون در پس زمینه می باشد. با کد بالا، دو بار Activity_1 در صف Activity ها وجود خواهد داشت، یعنی اگر همین طور بر روی دکمه Back گوشی اشاره کنیم، دو بار آن را مشاهده می کنیم (دو اجرای جداگانه).

اما ممکن است که ما بخواهیم به همان اجرای قبلی Activity که در پس زمینه قرار گرفته است برگردیم، برای این منظور، باید یک Flag را برای روش Intent به کار ببریم :

Intent intent = new Intent(Activity_2.this, Activity_1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

کد بالا باعث می شود که همان اجرای موجود از Activity_1 که در پس زمینه است را دوباره ببینیم (Resume شود) و اگر با زدن دکمه Back از آن خارج شویم و همین طور دکمه Back را بزنیم، دیگر آن را نخواهیم دید (سایر Activity های موجود در پس زمینه را با همان ترتیبشان خواهیم دید و در نهایت از برنامه اندروید خارج می شویم (وقتی دیگر هیچ Activity دیگری در پس زمینه باقی نمانده باشد)).

شنبه 17 مرداد 1394  6:15 PM
تشکرات از این پست
mty1378
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

به دست آوردن Context (برای یک Activity یا برای Application)، در برنامه نویسی اندروید

همان طور که می دانید هر Activity دارای یک Context است، علاوه بر این، کل برنامه اندروید (یعنی Application) نیز دارای یک Context می باشد. حال در این مبحث می خواهیم شرح بدهیم که چگونه می توان Context مربوط به یک Activity یا Context مربوط به کل برنامه اندروید (یعنی Application) را به دست آورد.

بد نیست که قبل از هر چیز، تفاوت بین Context مربوط به Application و Context مربوط به Activity را شرح بدهیم. هر دوی آنها، نمونه ای از Context می باشد، اما تفاوت آنها در این است که Context مربوط به Application ، در کل چرخه اجرای (lifecycle) برنامه اندروید وجود دارد، اما Context مربوط به Activity ، تنها در چرخه اجرای (lifecycle) آن Activity موجود است.

با استفاده از روش زیر، می توانیم Context مربوط به Application را به دست آوریم :

baseContext.getApplicationContext()

در کدهای بالا، به جای عبارت baseContext ، باید Context مربوط به آن Activity که در آن هستیم را بنویسیم (یا Context مربوط به موارد دیگر).

همچنین اگر بخواهیم Context مربوط به یک Activity را به دست آوریم، باید در میان کدهای آن Activity ، کد زیر را بنویسیم :


getApplication()

و یا با روش زیر (در مواردی مثل کدنویسی در Fragment ها و ...) :


getActivity()

همچنین، چنانچه کلاسی (class) که برای آن کد می نویسید، یکی از کلاس های زیر باشد :


ContextWrapper
MockContext
AbstractInputMethodService
AccessibilityService
AccountAuthenticatorActivity
Activity
ActivityGroup
AliasActivity
Application
BackupAgent
BackupAgentHelper
ContextThemeWrapper
ExpandableListActivity
InputMethodService
IntentService
IsolatedContext
LauncherActivity
ListActivity
MockApplication
MutableContextWrapper
NativeActivity
PreferenceActivity
RecognitionService
RemoteViewsService
RenamingDelegatingContext
Service
SpellCheckerService
TabActivity
TextToSpeechService
VpnService
WallpaperService

آنگاه می توانید با استفاده از کلمه زیر، به Context ارجاع بدهید :


this

نکته :

دقت شود که اگر یک کلاس (class) جدید تعریف کنیم و در آن به Context نیاز داشته باشیم، آنگاه باید Context را به آن ارسال نماییم (یعنی Context مربوط به Activity). مثلا فرض کنید که بخواهیم یک کلاس (class) با نام MyClass بسازیم که از گسترش Application ساخته شود و هنگام ارجاع به آن در یک Activity ، بخواهیم Context مربوط به Activity را به آن ارسال کنیم، بنابراین باید ساختار آن کلاس (class) را به صورت کدهای زیر بنویسیم :

 

public class MyClass extends Application {
       
    private Context context;

    public MyClass (Context context) {
        this.context = context;
    }

}

اکنون برای ارسال Context مربوط به Activity ، به کلاس MyClass ، باید در میان کدهای Activity ، کدهای زیر را بنویسیم :


MyClass myClass = new MyClass(this);

همان طور که مشاهده می کنید، از کلاس MyClass ، یک شیء (object) با نام myClass ساخته ایم و هنگام این فرآیند، Context مربوط به Activity را به کلاس ارسال کرده ایم (کلمه this به Context مربوط به Activity اشاره می کند).

شنبه 17 مرداد 1394  6:16 PM
تشکرات از این پست
wikiumut
wikiumut
کاربر برنزی
تاریخ عضویت : اردیبهشت 1394 
تعداد پست ها : 668

پاسخ به:کار با Activity ها ، در برنامه نویسی اندروید

میخوام کد php بیارم داخل اندروید باید چیکار کنم ؟؟

تحصیل در بلاروس تحصیل در ایتالیا تحصیل در نروژ تحصیل در مجارستان تحصیل در فنلاند تحصیل در هند تحصیل در اسپانیا تحصیل در اتریش
شنبه 17 مرداد 1394  6:37 PM
تشکرات از این پست
hosseinb68
wikiumut
wikiumut
کاربر برنزی
تاریخ عضویت : اردیبهشت 1394 
تعداد پست ها : 668

پاسخ به:کار با Activity ها ، در برنامه نویسی اندروید

آموزشی بیشتر بزارید

تحصیل در بلاروس تحصیل در ایتالیا تحصیل در نروژ تحصیل در مجارستان تحصیل در فنلاند تحصیل در هند تحصیل در اسپانیا تحصیل در اتریش
شنبه 17 مرداد 1394  6:38 PM
تشکرات از این پست
hosseinb68
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر
یک شنبه 18 مرداد 1394  8:35 AM
تشکرات از این پست
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

تغییر رنگ پس زمینه یک Activity ، در برنامه نویسی اندروید

فرض کنید که بخواهیم رنگ پس زمینه یک Activity را تغییر بدهیم، برای این منظور، می توانیم به دو روش زیر عمل کنیم :

روش اول : تعیین رنگ پس زمینه Activity ، با کدنویسی در فایل xml متناظر با Activity

همان طور که می دانید، برای Activity ، یک فایل xml متناظر داریم که عناصر گرافیکی Activity و در کل، ساختار گرافیکی Activity در آن تعریف می شود. فرض می کنیم که فایل xml متناظر با Activity در ابتدا دارای کدهای زیر باشد :


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</LinearLayout>

برای آنکه رنگ پس زمینه Activity را برابر رنگ آبی تعیین کنیم، باید مشخصه زیر را به تگ LinearLayout اضافه کنیم :


android:background="#0000FF"

یعنی کدها به صورت زیر خواهند بود :


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0000FF" >

</LinearLayout>

روش دوم : تغییر رنگ پس زمینه Activity ، با کدنویسی در فایل java مربوط به Activity

برای اینکه بخواهیم رنگ پس زمینه یک Activity را تغییر بدهیم، باید در فایل java مربوط به آن Activity ، کدهای زیر را بنویسیم :


getWindow().getDecorView().setBackgroundColor(Color.RED);

کد بالا باعث می شود که پس زمینه Activity به رنگ قرمز نمایش داده شود، شما می توانید رنگ دلخواه خود را انتخاب کنید.

یک شنبه 18 مرداد 1394  8:36 AM
تشکرات از این پست
دسترسی سریع به انجمن ها