آکادمی آموزش آنلاین طوسی

آموزش ساخت اپلیکیشن ذکر شمار (قسمت چهارم) معرفی متدهای مرتبط با کلاس Button در اندروید

اهداف آموزشی این قسمت عبارتند از:

1. معرفی متدهای مرتبط با کلاسButton در اندروید

2. معرفی متدsetText

3. آشنایی با نوع پارامتری که می توان در متد setText قرار داد

پس از فراخوانی موفقیت آمیز کلاسButton در آموزش قسمت چهل و دوم، در این آموزش در ادامه ساخت اپلیکیشن "ذکر شمار مادر بزرگ" قصد داریم تا به معرفی متدهای مرتبط با کلاسButton در اندروید بپردازیم. در حقیقت با استفاده از متدهای مرتبط می بایست به اپلیکیشن خود دستور دهیم تا زمانیکه روی دکمه کلیک شد چه کاری را انجام دهد.

برای شروع کار پروژه ای که تحت عنوان My Prayer Counter ایجاد کردیم را باز کرده و همانگونه که در آموزش گذشته توضیح دادیم فایل MainActivity.java را در محیط برنامه نویسی اکلیپس باز می کنیم:

 

 

 

 

 

 

 

همانگونه که در کد فوق می بینیم موفق شده ایم تا یک شیئ از روی کلاسButton که در SDK اندروید قرار دارد تحت عنوان btn بسازیم. حال از آنجا که کلاسButton را به اپلیکیشن خود import کرده ایم می توانیم به کلیه متدهای مرتبط با این کلاسدسترسی داشته باشیم. از این رو اول نام شیئساخته شده از روی کلاسButton را نوشته سپس یک نقطه قرار داده و همانطور که در تصویر زیر مشخص است به کلیه متدهای مرتبط با کلاسButton دسترسی خواهیم داشت. چنانچه بخواهیم دکمه ای پس از آنکه روی آن کلیک شد کاری انجام دهد به متدی تحت عنوان setOnClickListener نیاز داریم. در واقع اگر بخواهیم این متد را به صورت تحت الفظی ترجمه می کنیم بایستی بگوییم که این متد معادل است با "اگر دکمه فشار داده شد به حرف کاربر گوش بده و یه کاری انجام بده"

همانگونه که در تصویر فوق مشخص است پس از نوشتن نام شیئی که از روی کلاسButton ایجاد کردیم و قرار دادن یک نقطه و نوشتن ابتدای نام متد مد نظر و فشردن هم زمان کلیدهای Ctrl و Space پنجره ای باز خواهد شد که کلیه متدهای مرتبط با کلاسButton را به ما نشان خواهد داد. اکنون متد مد نظر را از این لیست پیدا نموده و روی آن کلیک می کنیم. حال کد ما به شکل زیر در خواهد آمد:

در حقیقت آنچه که مابین دو پرانتز این متد قرار می گیرد به عنوان پارامتر این متد خواهد بود. به طور کلی می توان گفت که ما در حال حاضر هیچ گونه OnClickListener یی نداریم پس بایستی یکی برای این دکمه بسازیم. از این روی کلید واژه new را نوشته یک فاصله قرار داده سپس عبارت View را نوشته و کلید های Ctrl و Space را به صورت هم زمان فشار می دهیم:

همانطور که در تصویر فوق نشان داده شده است می بایست روی گزینه ای که حاوی View.OnClickListener است کلیک کنیم. در واقع از آنجا که متد OnClickListener بخشی از کلاسView است، می بینیم که ابتدا کلاسView نوشته شده و این متد به آن ضمیمه شده است:

 

 

 

 

 

 

 

 

 

 

 

 

همانطور که در کد فوق با یک فلش قرمز رنگ مشخص شده است، کلاسView به برنامه ما Import شد. جایی که با یک دایره قرمز رنگ نشان داده شده است به منزله نقطه پایانی جایی است که متدهای مرتبط با کلاسButton در آن قرار گرفته و قرار است به محض کلیک شدن روی دکمه کاری انجام دهند. اگر به داخل دایره خوب توجه کنیم می بینیم که دور پرانتز نقطه چین قرار گرفته است و این نقطه چین حاکی از آن است که مشکلی در ارتباط با این متد وجود دارد. با قرار دادن نشانگر موس خود روی نقطه چین با تصویر زیر مواجه خواهیم شد:

 

 

 

 

 

عبارتی که در باکس زرد رنگ وجود دارد حاکی از آن است که می بایست یک علامت ; در آن نقطه قرار داده تا دستور ما تکمیل شود. حال با قرار دادن یک علامت ; پس از پرانتز خواهیم دید که مشکل بر طرف خواهد شد:

 

 

 

 

 

تا اینجای کار موفق شده ایم تا متدهای لازم برای عملکرد یک دکمه را وارد برنامه کنیم. در واقع اگر به کد فوق نگاهی بیندازیم خواهیم دید که دارای یک کامنت است. محل قرارگیری این کامنت جایی است که می بایست دستورات مد نظر خود را به منظور عملی شدن آنها نوشت. به عبارت دیگر متدی تحت عنوان onClick که از جنس void است به منزله جایگاهی است که قرار است دستورات ما را در مورد دکمه اجرا کند.

اکنون از آنجا قرار است هر بار که ذکری گفتیم یکبار روی دکمه کلیک کنیم تا یک واحد به تعداد ذکرها اضافه شود نیاز است تا کد خود را به شکل زیر تکمیل کنیم:

 

 

 

 

 

 

 

 

 

 

 

 

در واقع داخل متد onClick نام متغیر خود را نوشته و دو علامت به علاوه پس از آن قرار می دهیم و در نهایت یک علامت ; می نویسیم. این خط از کد یک واحد به مقدار متغیر counter اضافه می کند. به عنوان راه کار جایگزین می توانیم از دستور ;counter = couner +1 نیز استفاده کنیم (به منظور آشنایی با اعمال Operator ها به سری آموزش های برنامه نویسی جاوا در سایت نردبان آموزش هشتم مراجعه نمایید).

در واقع پس از وارد کردن کلاس TextView به اپلیکیشن خود به کلیه متدهای این کلاس دسترسی خواهیم داشت. یکی از متدهایی که در این اپلیکیشن استفاده خواهیم کرد متد setText است که این وظیفه را دارا است تا متنی را به یک TextView اختصاص دهد. حال کد خود را به صورت زیر تکمیل می کنیم:

همانطور که در تصویر فوق می بینیم ابتدا نام TextView خود را نوشته سپس یک نقطه قرار داده و متد setText را می نویسیم. اگر در تصویر فوق دقت کنیم می بینیم که دوره tView نقطه چین قرار گرفته است. برای اینکه ببینیم اکلیپس با چه مشکلی رو به رو شده است، نشانگر موس خود را روی tView قرار می دهیم:

 

 

 

 

 

 

 

 

همانطور که در باکس زرد رنگ مشخص است، از آنجا که ما کلاس TextView خود را داخل کلاس تعریف نکرده بلکه داخل متد onCreate تعریف کرده ایم قابل دسترسی نیست. راه کاری که اکلیپس به ما پیشنهاد می دهد این است که tView را به final تبدیل کنیم. برای این منظور با نشانگر موس خود روی خط آبی رنگ کلیک کرده تا دستور final را عملی سازیم:

 

 

 

 

 

 

 

 

 

 

همانطور که در تصویر فوق مشخص است کلید واژه final به کلاسTextView اضافه شده است. به طور خلاصه کاری که این کلید واژه final انجام می دهد این است که کلاسTextView را محدود کرده و از این پس امکان وارثت از این کلاس از بین خواهد رفت .

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

چنانچه تمایل داشته باشیم که از کلید واژه final استفاده نکنیم می توانیم کلاسTextView خود را از داخل متد onCreate به داخل کلاسMainActivity انتقال دهیم که در این صورت دیگر نیازی به نوشتن کلید واژه final نیست:

 

 

 

 

 

 

 

 

 

 

 

همانطور که در تصویر فوق مشخص است کلاسTextView در کنار متغیر counter داخل کلاسMainActivity تعریف شده است سپس داخل متد onCreate مقداری را به آن اختصاص داده ایم. اگر به تصویر فوق خوب دقت کنیم می بینیم که متد setText نیز دارای مشکلی است و دور آن نقطه چین قرار گرفته است. در واقع علت آن است که داخل آن هیچ پارامتری قرار نداده ایم و به محض اینکه پارامتری برای آن در نظر بگیریم این مشکل برطرف خواهد شد.

به طور خلاصه tView شیئی است که از روی کلاسTextView ساخته شده است. این کلاسنیز به یک TextView دیگر که در فایل XML تحت عنوان txt_textTwo ایجاد کردیم لینک شدهاست. متدی هم تحت عنوان setText که به tView ضمیمه شده است این وظیفه را دارا است تا هرآنچه که داخل پرانتز مقابل آن قرار گیرد را به txt_textTwo اختصاص دهد. حال از آنجا که می خواهیم با هر بار کلیک شدن روی دکمه یک واحد به متغیر counter اضافه شود پس می توانیم نتیجه بگیریم که با قرار دادن متغیر counter داخل پرانتز مرتبط با متد setText می توانیم به نتیجه مد نظر دست پیدا کنیم. اکنون کد خود را به صورت زیر تکیمل می کنیم:

 

 

 

 

 

 

 

حال برنامه خود را اجرا می کنیم:

با کلیک کردن روی دکمه به علاوه قصد داریم تا یک ذکر گفته شده را به شمارنده اضافه کنیم:

به محض کلیک کردن می بینیم که اپلیکیشن اصطلاحاً Crash می کند. مسلماً مشکلی وجود دارد که از آن بی خبریم.

در حقیقت بنده از یک نکته غفلت کرده و آن هم اینکه پارامتر مرتبط با متد setText حتماً می بایست چیزی از جنس یک string یا نوشته باشد که در غیر اینصورت عملکرد این متد با مشکل مواجه خواهد شد. برای رفع این مشکل می توانیم یا متنی را همچون "ذکر شمار" به پارامتر داخل پرانتز اضافه نموده و یا صرفاً یک علامت " " به متغیر counter اضافه کنیم که در این آموزش راه کار دوم را مد نظر قرار خواهیم داد:

 

 

 

به عنوان یک قانون کلی همواره بایستی این نکته را مد نظر داشته باشیم که هرگاه چیزی از جنس یک string یا متن را به دیگر متغیرها مثال یک int یا به عبارتی یک عدد صحیح اضافه کنیم جمع هر دوی آنها یک string یا متن خواهد بود. اکنون با دانستن این نکته که پارامتر مرتبط با متد setText می بایست یک string باشد به سادگی می توانیم دو علامت " " داخل پرانتز نوشته و یک علامت به علاوه پس آنها قرار داده و در نهایت نام متغیر خود را بنویسیم که با اینکار متد setText فکر خواهد کرد که داخل گیومه ها متنی وجود دارد که این مسئله هم می تواند درست باشد و هم نادرست. از دید اندروید درست است چرا که وجود این دو علامت را به عنوان یک متن تلقی خواهد کرد اما از دید ما نادرست است چرا که چیزی داخل گیومه ها نوشته نشده است. به هر حال این راه کاری است که از آن طریق می توان مشکل خود را حل کنیم. اکنون مجدد اپلیکیشن خود را اجرا می کنیم:

همانطور که در تصویر فوق مشاهده می کنیم، با هفت بار ذکر گفتن هفت واحد به شمارنده اضافه شده است.

 

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:

1. چند راه برای افزودن یک واحد به متغیر counter وجود دارد؟

2. چرا کلاس TextView را بایستی final کرد؟

3. راه کاری که به منظور ننوشتن کلید واژه final است چیست؟

4. چرا اگر هیچ گونه stringیی به عنوان پارامتر برای متد setTextدر نظر گرفته نشود اپلیکیشن ما به درستی کار نخواهد کرد؟

برای مشاهده نظرات وارد سایت شوید یا ثبت‌نام کنید.

43rd_Session,_ZekrShomar_Project,_Part_4.pdf

لینک دانلود فایل درس آموزش ساخت اپلیکیشن ذکر شمار (قسمت چهارم) معرفی متدهای مرتبط با کلاس Button در اندروید

سرفصل های آموزشی دوره رایگان برنامه نویسی اندروید Android

منبع این درس در سایت سکان (www.sokanacademy.com)