در ادامه ی این آموزش
دریافت نسخه 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
این فایل در پوشه ی اصلی قرار می گیرد.