وب سایت بروز
جستجو کردن
Close this search box.
جستجو کردن
Close this search box.

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

تماشای برخط  [لینک مستقیم] فیلم آموزش «فعالیت ها (activities)»

زیرنویس انگلیسی [English Subtitle]

دریافت نسخه pdf این آموزش [2.11 مگابایت]

همون طور که قبلا هم اشاره شد، فعالیت ها (activities) یکی از ساختارهای اصلی برنامه اندرویده. اگه بخوام خیلی ساده بگم، یه فعالیت یه صفحه ی ساده از برنامه‌ی شماست. پس خیلی مهمه که مبانی فعالیت‌ها رو خوب یاد بگیرید.

۱.برای شروع اول یه پروژه اندروید تو ایکلیپس می‌سازیم. (راهنما) از منوی سمت چپ روی اسم پروژه کلیک می کنیم و از شاخه‌ی src به دومین زیر شاخه می‌ریم که یه فایل جاواست. این فایل کلاس فعالیت رو ارث‌بری می‌کنه و توسعه می‌ده. تو خط آخر این فایل جاوا (تو تصویر آبی شده) می‌بینیم که محتوای بصری این فعالیت (ContentView)، رجوع داده شده به یه فایل به نام main که در فولدر layout در منابع (resource) هست.

 

۲.پس اگه بریم توی شاخه‌ی res و بعد layout و بعد main.xml این فعالیت رو می‌بینیم. که به طور پیش فرض یه متن Hello World توش وجود داره. توصیه می‌کنم برای اینکه مطمئن بشید برنامه‌تون درست کار می کنه یه بار Run کنید.

 

۳.خوب حالا می‌خوام خیلی سریع چند تا نکته رو تو AndroidManifest.xml براتون توضیح بدم. در حالت ویرایش xml، می‌بینیم که درون تگ application، تگ activity وجود داره. یکی از چیزایی که اینجا می‌بینیم <intent-filter> هست. (که با توضیحات مفصل تو یه پست دیگه بررسی خواهد شد) به طور ساده، این تگ به سیستم اندروید می‌گه که وقتی این برنامه شروع به کار می‌کنه، اولین فعالیتی که باید اجرا بشه، اون فعالیتیه که داخل تگ action قرار داره. و این طور معرفی شده :

 

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

۴.اگه بخوایم یه فعالیت دیگه هم به برناممون اضافه کنیم، احتیاج داریم که دو فایل Main.java و main.xml رو دوباره بسازیم. (البته اسم این دوفایل رو هرچیزی که دلتون بخواد می‌تونید بذارید و محدودیتی نداره ولی برای فراگیری راحتتر، سعی کردم که در همه پروژه‌ها اسم‌های یکسانی انتخاب کنم) یعنی باید اول یه فایل جاوا بسازیم که کلاس activity رو ارث‌بری کنه. برای این کار روی اسم package راست کلیک می‌کنیم، بعد New و بعد هم class.

۵.یه اسمی براش بذارید (جلوی فیلد Name) من اسمش رو می‌ذارم Dovomi و بعد رو Browse کلیک کنید. اینجا می‌خوایم کلاسی رو انتخاب کنیم که این فعالیت قراره ارث‌بری کنه. پس تو فیلد choose type بنویسید activity و کلاس Activity – android.app رو انتخاب کنید. روی ok کلیک کنید بعد هم Finish.

۶.حالا یه فایل جاوا درست شده به نام Dovomi که کلاس Activity رو ارث‌بری می‌کنه. این فعالیت باید تابع (متد)‌ onCreate رو دوباره نویسی (override) کنه. توی کلاس بنویسید oncre و با زدن ctrl + space اسم توابعی (متدهایی) که با این حروف آغاز می‌شه رو میاره، تابع onCreate رو انتخاب کنید.

۷.قدم بعدی، اینه که یه فایل xml بسازیم که شبیه main.xml باشه ولی واسط کاربری فعالیت Dovomi رو نگه داره. وقتشه که از سومین دکمه‌ی مخصوص اندروید که در toolbar ایکلیپس وجود داره استفاده کنیم (این دکمه به ما کمک می‌کنه که یه فایل xml اندرویدی بسازیم – تصویر) روش کلیک کنید، صفحه‌ای باز می‌شه، برای این فایل یه اسم بذارید (جلوی فیلد File) البته این نام گذاری خیلی سخت و محکمه – تنها از حروف کوچک و اعداد و خط زیر _ می تونید استفاده کنید و اول اسم هم باید با حروف شروع بشه – خوب Resourse Type که Layout باشه. Root Element به معنای المان ریشه رو هم باید انتخاب کنیم. فعلا همون LinearLayout باشه تا بعدا مفصل بقیه رو توضیح بدم. LinearLayout ساده‌ترین طرح‌بندی صفحه است که وقتی چیزهایی رو به صفحه اضافه می‌کنیم به روش طولی (Linear) طرح‌بندی(Layout) می‌کنه. وقتی Finish رو بزنید یه فایل xml می‌سازه.

۸.وقتی فایل xml ساخته شد برای شما در حالت طرح‌بندی گرافیکی (Grafical Layout) میاره. که از اینجا می‌تونید هر عنصری که بخواید رو توی صفحه‌بندی تون انتخاب کنید. می‌تونید برای شروع یه متن از ستون سمت چپ بکشید و توی صفحه‌ی مشکی رها کنید، برای تغییر متن، روش یه بار کلیک کنید و از properties (که قبلا آورده بودیمش سمت راست محیط کارمون)، فیلد Text رو پیدا کنید و متنش رو تغییر بدید. از بخش properties خیلی از ویژگی‌های عناصر رو می‌شه تعیین کرد.

۹. حالا که فعالیت دوم رو ساختیم، نیاز داریم که یه جوری تو برناممون اجراش کنیم، چون وقتی برنامه باز می‌شه همون فعالیت اصلی اجرا می‌شه. برای این منظور، به فعالیت اصلی‌مون می‌ریم (main.xml) و یه دکمه می‌ذاریم. در قسمت properties، خود ایکلیپس به طور پیش فرض، یه id برای دکمه می‌ذاره (اینجا button1)، که برای ارجاع هرچیزی به این دکمه، به id (شناسه) اش احتیاج داریم. شما می‌تونید این شناسه رو از همین‌جا تغییر بدید.

۱۰.الان می‌خوایم یه کدی بنویسیم که وقتی کاربر روی این دکمه کلیک کنه، فعالیت Dovomi اجرا بشه. برای این‌کار می‌ریم به فایل main.java. زیر آخرین خط نوشته شده در تابع (متد) onCreate، چند خط اضافه می‌کنیم تا به اون دکمه‌ای که ساختیم بتونیم رجوع بدیم. برای این منظور، یه کنترل Button می‌سازم به اسم b. برای ارجاع از دکمه‌ای که تو واسط کاربری ساختیم به این کنترل، باید از تابع findViewbyId استفاده کنیم. در واقع این تابع آدرس اون دکمه رو از واسط کاربری می‌گیره و به کنترلی (b) که تو فایل xml ساختیم ارجاع می‌ده. توی پرانتزهای این تابع بنویسید R.id وقتی یک نقطه بعد از این بگذارید، تمام اشیائی که می‌تونید بهشون رجوع بدید رو نشون می‌ده، button1 رو انتخاب کنید. (الان کنترل b، ارجاع داده شد به اون دکمه‌ای که در شماره قبل ساختیم)

۱۱.با زدن کلیدهای ctrl +1 در ویندوز و cmd + 1 در مک، می‌بینیم که از برنامه خطا می‌گیره.

در ادامه ‌ی این آموزش

دریافت نسخه pdf این آموزش[2.78 مگابایت]

 

۱۱.با زدن کلیدهای ctrl+1 در ویندوز و cmd+1 در مک، می‌بینیم که از برنامه خطا می‌گیره و برای رفع مشکل پیشنهادهایی رو می‌ده، اینجا بهتره با انتخاب گزینه ‘import ‘Button کلاس دکمه رو وارد(import) می‌کنیم.

 
۱۲.بعد از این کار، دوباره از برنامه خطا می گیره چون نوع داده‌ای که به عنوان خروجی متد (تابع) findViewById هست (یعنی نوع داده‌ای view) با نوع داده‌ای دکمه فرق می‌کنه به همین خاطر باید cast [به معنی در قالب قرار دادن، به شکل درآوردن] بشه، با زدن ctr+1، بهمون پیشنهاد می‌ده که این کارو انجام بدیم.
 
۱۳.قدم بعدی اینه که متد setOnClickListener (به معنای گوش بزنگ کلیک) رو به کار ببریم تا هروقت کاربر روی دکمه کلیک کرد، بتونیم بهش پاسخ بدیم و باعث اجرای چیزی بشیم. برای این کار، باید این کد رو اضافه کنیم. () b.setOnCLickListener درون پرانتزها باید یه شی جدید از نوع onClickListener بسازیم. (یادتون باشه که می‌تونید برای راحتی کار و سرعت بیشتر چندتا حرف اول کلمات رو بنویسید و با زدن ctrl+space برنامه بقیه اش رو بهتون پیشنهاد می‌ده). این شی درواقع یه کنترل کننده‌ی وقایع (event handler) ناشناس هست.
خوب بازهم خطا گرفته، ctrl+1 می‌زنیم ببنیم چه پیشنهادی می‌ده، همون اولی یعنی وارد کردن کلاس onClickListener هست رو انتخاب می‌کنیم. در آخرین خط (بعد از بسته شدن پرانتز این دستور یه ; بذارید)
۱۴.اونحایی که نوشته TODO // دستوراتی رو می نویسیم که می‌خوایم با فشردن دکمه اجرا بشن. خوب ما در اینجا می‌خوایم وقتی کاربر دکمه رو فشار داد، فعالیت Dovomi اجرا بشه. برای شروع کار یه فعالیت، از متد startActivity استفاده می‌کنیم. در داخل پرانتزهای این متد(تابع)، باید نمونه‌ای از کلاس intent رو انتقال بدیم (پاس کنیم). -بعدا مفصل به کلاس intent می‌پردازیم- ولی تا همین حد بدونید که کار این کلاس اینه که اعلام کنه، این مولفه رو می خوام فعال کنم. برای این کار باید یه شی جدید از نوع intent بسازیم (new intent) برای ساختن این شی چندین راه مختلف وجود داره، و چون ما می‌خوایم برای یه فعالیت ازش استفاده کنیم ازاین نوعش استفاده می‌کنیم (تو تصویر مشخصه) که یه contexView می‌گیره و یه کلاسی که مال فعالیت مورد نظرمون هست.
۱۵.درباره context باید بگم که از این به بعد نسبتا زیاد ازش استفاده می‌کنیم، به خاطر این که هر دفعه‌ای که از سیستم می‌خوایم تا چیزی رو اجرا کنه، یه context می‌فرستیم که مشخص می‌کنه چه مولفه‌ای این تقاضا رو داده. چند راه برای گرفتن context وجود داره، ولی چون ما در یه تابع داخلی ناشناس (anonymous inner method) هستیم، راحتترین روش برای این کار اینه که بگیم main.this که رجوع می‌ده به فایل main که اینجا داریم، به طور کلی این کار به این معنیه که سیستم متوجه بشه این درخواست از طرف main بوده.
دومین ورودی این تابع باید یه کلاسی باشی از اون فعالیتی که می‌خوایم اجرا کنیم، که Dovomi باشه. و می‌نویسیم Dovomi.class و آخر این خط یه ; می‌ذاریم.
 
۱۶.خیلی سریع کارایی که کردیم رو دوره می‌کنم، اول یه ارجاع گرفتیم از دکمه‌ای که تو فایل main.xml ساختیم، تابع onClickListener رو از نوع داخلی ناشناس نوشتیم که وقتی کاربر کلیک می‌کنه (درواقع توی گوشی که موس نیست کلیک کنه، منظورش همون فشاردادن با انگشته)، یه فعالیت جدید شروع بشه، که به عنوان ورودی یه intent بهش می‌دیم که مشخص کنه چه کسی این درخواست رو کرده (main)، و کدوم فعالیت قراره اجرا بشه(Dovomi).
‎خوب حالا بیاید این برنامه رو اجرا کنیم. وقتی رو دکمه کلیک می‌کنیم این پیغام خطا ظاهر می‌شه که The Application Activities has stopped unexpectedly یعنی فعالیت برنامه به صورت غیر منتظره‌ای قطع شده.
‎در طول توسعه برنامه این اتفاق خیلی ممکنه پیش بیاد اما باید یادبگیریم که چطور با این مشکل برخورد کنیم و رفعش کنیم.
 
‎۱۷.دوباره به ایکلیپس برگردید، تا الان تو منظر جاوا داشتیم کار می‌کردیم، حالا می‌ریم سراغ منظر اندرویدی، اگه در قسمت بالا سمت راست صفحه‌ی ایکلیپس نگاه کنید، این دکمه رو می‌بینید  روش کلیک کنید، other رو انتخاب کنید، یک منظر مختص اندروید وجود داره به نام DDMS اون رو انتخاب کنید. این منظر حاوی یه سری ابزار مختلف برای نظارت بر روی اینکه چطور برنامتون روی شبیه ساز یا گوشی کار می‌کنه، هست.
 
۱۸.یکی از فضاهای مفید LogCat هست، وقتی برنامتون روی شبیه‌ساز یا گوشی اجرا می‌شه، به طور مداوم پیغام‌هایی رو درباره‌ی چیزها می‌فرسته، همونطور که مشاهده می‌کنید یه سری پیغام قرمز رنگ هم داریم که به طور کلی چیز خوبی نیست.
دومین خط قرمز نوشته ActivityNotFoundException یعنی فعالیت مورد نظر رو پیدا نکرده، اما چرا؟ به خاطره اینه که هنوز این فعالیت رو به فایل manifest اضافه نکردیم. پس می‌ریم سراغ manifest تا تنظیمات لازم رو انجام بدیم.

۱۹.هر فعالیتی که در برنامه شما وجود داره، باید تو فایل manifest تعریف شده باشه، خوب پس الان باید تو فایل manifest یه فعالیت جدید درست کنیم، با نوشتن این کد 

 

<activity android:name="" />

 

ساختن یه فعالیت جدید رو شروع می‌کنیم، در قسمت اسم باید به اسم فعالیتیمون ارجاع بدیم، یه نقطه (.) می‌ذاریم تا به بسته‌ی پیش فرض (ir.AndroidCode.ir) اشاره کنه و بعد می‌نویسیم Dovomi. چون نمی‌خواهیم intents تعریف کنیم، فقط کافیه همین کد رو بنویسم.

 

<activity android:name=".Dovomi" />

 

حالا دوباره پروژه رو اجرا کنید.

۲۰.وقتی برنامه تو شبیه ساز اجرا شد، روی دکمه کلیک کنید، می‌بینید که با این کار برنامه به فعالیت Dovomi رفته ولی هیچی نشون نمی‌ده و خبری از اون متنی که نوشته بودیم نیست، خوب اگه به فایل جاوامون برگردیم، تفاوت فایل جاوای dovomi و main در اینه که ما هنوز محتوای بصری رو به فایل جاوا ضمیمه نکردیم، (یعنی تابع setContentView رو استفاده نکردیم، چون این تابع به سیستم اندروید می‌گه که برای این فعالیت از کدوم محتوای بصری -فایل xml- استفاده بکنه)

پس این کد رو اضافه می‌کنیم. (ورودی تابع : به قسمت منابع یا resource برو از پوشه ی layout فایل dovomi.xml رو بردار)

 

 

setContentView(R.layout.dovomi);

 

حالا پروژه رو دوباره اجرا کنید.

۲۱.خوب دیگه این دفعه، وقتی رو دکمه کلیک می‌کنید به فعالیت دوم می ره و متنی که نوشتیم رو نشون می‌ده 🙂

به طور خلاصه : باید اول یه فایل جاوا بسازید، اگه می‌خواید محتوای بصری جدیدی درست کنید یه فایل xml هم برای اون درست می‌کنیم و به فایل جاوا پیوست می‌کنیم (شماره ۲۰) ، یه بخش مهم اینه که این فایل xml رو تو manifest تعریف کنید (شماره ۱۹)

 

دریافت source code این آموزش :

دانلود فایل Main.java

دانلود فایل Dovomi.java

دانلود فایل main.xml

دانلود فایل dovomi.xml

فایل های جاوا درون پکیج قرار می گیرد و فایل های xml داخل پوشه ی layout در پوشه ی res (راهنما : با توجه به این عکس فایل ها را در پوشه های مناسب قرار دهید)

دانلود فایل AndroidManifest.xml

این فایل در پوشه ی اصلی قرار می گیرد.

 

برگرفته شده از AndroidCode.ir

دیدگاهتان را بنویسید

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