آشنایی با Activityها و چرخه حیات آنها را در این مطلب به صورت حرفهای بررسی میکنیم.
اگر به مسیر manifests رفته و فایل AndroidManifest.xml را باز کنید تگی با عنوان activity خواهید دید که در خاصیت name آن نام اصلی activity وجود دارد. فایل Manifest پیش فرض برنامه اندروید ما به شکل زیر است:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hitos.ir.hitosapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@>
در فایل فوق نام برنامه، پکیج برنامه و دیگر خصوصیات کلی مانند Theme و آیکن نرم افزار را میتوان مشاهده و یا تغییر داد.
در خط 10 تگی به نام activiy موجود است که در خط 16 به پایان میرسد. خاصیت android:name شامل نام اکتویتی میشود. نقطه قبل از نام اکتیویتی به این معناست که این اکتیویتی باید از پکیج اصلی برنامه فراخوانی شود.
تگ intent-filter درون تگ activity به این معناست که این اکتیویتی باید به عنوان اولین اکتیویتی در برنامه اجرا شود. هر برنامه ممکن است متشکل از دهها اکتیویتی باشد که با intent-filter اولین اکتیویتی اجرا شده توسط نرم افزار مشخص میشود.
اگر بخواهیم یک اکتیویتی جدید به برنامه خود اضافه کنیم در مسیر java روی package برنامه خود راست کلیک کرده و new و از آن activity و در نهایت Empty Activity را انتخاب میکنیم.
در پنجره باز شده و در Activity name نام اکتیویتی جدید را وارد میکنیم. اگر گزینه Generate Layout File فعال باشد یک لایه نمایش برای اکتیویتی جاری به نامی برابر فیلد Layout Name ایجاد میگردد.
دقت کنید که وقتی Activity را ایجاد کردید فایل AndroidManifest.xml نیز به صورت خودکار ویرایش شده و تگ این اکتیویتی جدید نیز به آن افزوده میگردد.
انتقال بین Activityها در اندروید
در این بخش قصد داریم به شما بیاموزیم که چگونه میتوان بین Activityها جا به جا شد. لایه نمایش MainActivity که activity_main نام دارد را به شکل زیر ویرایش کنید:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="hitos.ir.hitosapp.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Activity 1"
android:textSize="30dip"
android:id="@+id/textView"/>
<Button
>
در لایه فوق یک TextView با متن Activity 1 و یک Button با متن SECOUND ACTIVITY داریم.
به برنامه خود یک activity جدید به نام Main2Activity و لایه نمایش activity_main2 اضافه کنید. لایه نمایش مرتبط با Activity دوم به صورت زیر خواهد بود:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="hitos.ir.hitosapp.Main2Activity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Activity 2"
android:id="@+id/textView2"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:textSize="30dip"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="First Activity"
android:id="@+id/button2"
android:layout_below="@+id/textView2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="32dp"/>
</RelativeLayout>
لایه نمایش فوق مشابه لایه نمایش اول است با این تفاوت که متنهای موجود در TextView آن Activity 2 و متن موجود در Button آن برابر FIRST ACTIVITY میباشد.
قصد داریم کدهایی بنویسیم که از لایه نمایش اول به لایه نمایش دوم و بالعکس منتقل شویم. کدهای MainActivity را به شکل زیر ویرایش میکنیم:
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button= (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent transfer = new Intent(MainActivity.this, Main2Activity.class);
MainActivity.this.startActivity(transfer);
}
});
}
}
در بخشهای قبلی کلیه مباحث فوق آموزش داده شد، و در این بخش به سطرهای 13 و 14 میپردازیم. برای انتقال به اکتیویتیهای دیگر به متد Intent نیاز داریم.
در سطر 13 پس از نوشتن Intent یک نام برای عملیات انتقال انتخاب میکنیم که در اینجا transfer را وارد کردیم. بعد از تساوی با new یک انتقال جدید از نوع Intent ایجاد میکنیم. داخل پرانتز دو ورودی داریم، در ورودی اول نام اکتیویتی و سپس this را وارد میکنیم، که منظور این است که مبدا این انتقال اکتیویتی MainActivity است. در ورودی دوم نام اکتیویتی دوم و در نهایت عبارت class را وارد میکنیم.
در سطر 14 نام اکتیویتی فعلی و سپس this و سپس عبارت startActivity و داخل پرانتز نام عملیات انتقال را که در سطر قبلی انتخاب کردیم وارد میکنیم.
کدهای Main2Activity به شکل زیر است:
public class Main2Activity extends AppCompatActivity {
Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
button2= (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent transfer = new Intent(Main2Activity.this, MainActivity.class);
Main2Activity.this.startActivity(transfer);
}
});
}
}
در این اکتیویتی قصد داریم به اکتیویتی قبل که MainActivity نام دارد باز گردیم. کلید button2 در لایه مربوط به activity_main2 را برای این کار اختصاص میدهیم.
کدهای سطرهای 13 و 14 برای انتقال به اکتیویتی اول آماده شده اند.
انتقال اطلاعات از یک اکتیویتی به اکتیویتی دیگر
در این بخش قصد داریم یک عبارت معین را از MainActivity به Main2Activity انتقال بدهیم. فایل MainActivity قبل را به شکل زیر ویرایش میکنیم:
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button= (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent transfer = new Intent(MainActivity.this, Main2Activity.class);
transfer.putExtra("sendedText", "hitos.ir");
MainActivity.this.startActivity(transfer);
}
});
}
}
به دستورات اضافه شده در سطر 14 دقت کنید. به متغیر transfer که مسئولیت انتقال به اکتیویتی Main2Activity را بر عهده دارد با متد putExtra یک پیام ارسال میکنیم. نام پیام sendedText و محتوای پیام hitos.ir میباشد.
فایل Main2Activity را به شکل زیر ویرایش میکنیم:
public class Main2Activity extends AppCompatActivity {
Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
String resived = getIntent().getExtras().getString("sendedText");
Toast.makeText(this, resived, Toast.LENGTH_LONG).show();
button2= (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent transfer = new Intent(Main2Activity.this, MainActivity.class);
Main2Activity.this.startActivity(transfer);
}
});
}
}
در سطرهای نه و ده دستورات مربوط به دریافت پیام قرار گرفته اند. در سطر نه یک متغیر به نام resived از نوع String ایجاد میکنیم و با getIntent().getExtras()
پیام را دریافت میکنیم. در سطر دهم با استفاده از Toast سعی در نمایش پیام دریافت شده از Main2Activity داریم.
مطالب بسیار مفید، ماربردی، مختصر و منظمی رو ارائه می کنید.
امیدوارم همیشه موفق باشید.