آموزش برنامه نویسی برای اندروید با ایکلیپس(22)- اولین اکتیویتی و رویداد

اکنون زمان آن است که اولین اکتیویتی تان را ایجاد کنید. البته شما اولین اکتیویتی را زمانی که پروژه تان را از طریق ویزارد New Android Project ایجاد کرده بودید، ساخته اید. بنابراین شما نیازی نیست که در این پروژه اکتیویتی
چهارشنبه، 10 تير 1394
تخمین زمان مطالعه:
موارد بیشتر برای شما
آموزش برنامه نویسی برای اندروید با ایکلیپس(22)- اولین اکتیویتی و رویداد
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(22)- اولین اکتیویتی و رویداد

 

مترجم: حبیب الله علیخانی
منبع:راسخون




 
اکنون زمان آن است که اولین اکتیویتی تان را ایجاد کنید. البته شما اولین اکتیویتی را زمانی که پروژه تان را از طریق ویزارد New Android Project ایجاد کرده بودید، ساخته اید. بنابراین شما نیازی نیست که در این پروژه اکتیویتی جدید ایجاد کنید. شما با فایل MainActivity.java در پروژه تان کار خواهید کرد. اکنون این فایل را باز کنید.

شروع با onCreate()

همان طور که در گذشته گفته شد، نقطه ی ورود به اپلیکیشن شما متد onCreate() است. کد برای فایل MainActivity.java شما شامل یک implement متد onCreate() است. اینجا جایی است که شما قصد دارید برخی کد را بنویسید. در حال حاضر، کد شما باید مثل زیر باشد:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(22)- اولین اکتیویتی و رویداد
شما می توانید کد مقداردهی اولیه را درست زیر متد setContentView() بنویسید.
به خط زیر توحه کنید:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(22)- اولین اکتیویتی و رویداد
این خط کد برای اجرای اپلیکیشن نیاز است که کلاس Activity پایه را برای اجرای کار راه اندازی کلاس MainActivity را فراخوانی می کند. اگر شامل این یک خط کد نباشد، یک استثنا در زمان اجرا دریافت خواهید کرد. اطمینان حاصل کنید که همیشه این متد، متد onCreate() تان را فراخوانی کند.

اجرای bundle:

در قطعه کد فوق، موارد زیر را توجه کنید:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(22)- اولین اکتیویتی و رویداد
یک bundle به شما توسعه دهنده، راهی برای پاس دادن اطلاعات به عقب و جلو بین صفحات(اکتیویتی های مختلف) در آنچه که به عنوان bundle شناخته شده می دهد. شما می توانید انواع مختلف را در یک bundle قرار دهید و آنها را روی اکتیویتی هدف دریافت کنید. در مطلب در بخش های آینده پوشش خواهیم داد.

نمایش UI

به طور پیشفرض، یک اکتیویتی UI مشخصی ندارد. این UI می تواند فرم ساده ای باشد که به کاربر اجازه ی تایپ اطلاعات را دهد تا ذخیره شود، همچنین این UI می تواند یک اپلیکیشن با ماهیت مجازی تقویت شده مبتنی بر دوربین(مانند Layar در اندروید مارکر) باشد، یا می تواند یک UI مبتنی بر drawn-on-the-fly باشد مانند بازی های دوبعدی یا سه بعدی. به عنوان یک توسعه دهنده، این کار شما است که به اکتیویتی بگوییدکدام Layout اکتیویتی باید لود شود.
برای دریافت UI برای نمایش در صفحه نمایش، باید برای اکتیویتی content view تنظیم کرد(از متد setContentView() استفاده می کنیم).
با کد زیر این کد انجام می شود:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(22)- اولین اکتیویتی و رویداد
R.layout.main فایل main.xml است که در دایرکتوری res/layouts قراردارد. این Layout است که در بخش های قبلی توضیح داده شد.
اپلیکیشن Silent Mode Toggle که در بخش های قبلی ساخته شده بود، تعامل زیادی با کاربر نداشت و درواقع خیلی کم است. کاربر دکمه را برای حالت سایلنت (بی صدا) می زند و سپس دوباره می تواند حالت سایلنت را خاموش کند.
برای پاسخ به این رویداد زدن به دکمه، نیاز به ثبت کردن دارید، آنچه که به عنوان شنونده ی رویداد(event listener) شناخته شده است. یک listener رویداد به یک رویداد در سیستم اندروید پاسخ می دهد. شما باید انواع رویدادها در سیستم اندروید را بشناسید، اما دوتا از پرکاربردترین آنها رویدادهای لمسی (مشابه رویداد کلیک) و رویدادهای کیبورد است.

رویدادهای کیبورد

رویداد کیبورد زمانیکه یک کلید خاصی از کیبورد فشرده می شود، رخ می دهد. به عنوان مثال می خواهید یک کلید میانبر برای اپلیکیشن خود اتخاذ کنید. اگر کابر کلید های Alt + E را فشار دهد، به منوی Edit رود. پاسخگویی به رویدادهای کیبورد به شما اجازه ی انجام این کار را می دهد. در این سری آموزش ما نمی خواهیم از رویدادهای کیبورد استفاده کنیم، اما اگر در اپلیکیشن های آینده به آن نیاز پیدا کردید، باید متد onKeyDown() را override کنیم، مانند زیر:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(22)- اولین اکتیویتی و رویداد

رویدادهای لمسی(Touch)

رویداد های لمسی زمانی که شما یک ویجت را بر روی صفحه نمایش ضربه می زنید(رویداد tap)، رخ می دهد. پلت فرم آندروید هر رویداد tap را به عنوان یک رویداد کلیک می شناسد. از اینجا به بعد، کلمه های ضربه(tap)، کلیک(click) ، و لمس(touch) مترادف هستند. نمونه هایی از ویجت که می تواند به رویداد touch پاسخ دهد، شامل (اما فقط به اینها محدود نمی شود):

1- Button
2- ImageButton
3- EditText
4- Spinner
5- List Item Row
6- Menu Item

همه ی viewها در سیستم اندروید می تواند نسبت به یک tap(ضربه) واکنش نشان دهد. با این حال برخی از ویجت ها خاصیت قابل کلیک خود را به طور پیش فرض false تنظیم کرده است. شما می توانید آن را در فایل layout بازنویسی(override) کنید یا با تنظیم خصوصیت قابل کلیک() یک view یا متد setClickable() در کد، یک view قابل کلیک باشد.

نوشتن اولین اداره کننده ی رویداد(event handler)

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

وارد کردن کد

کدهای زیر را در ادیتور وارد کنید:
1- package net.rasekhoon;
2-
3- import android.app.Activity;
4- import android.os.Bundle;
5- import android.view.View;
6- import android.widget.Button;
7-
8-
9- public class MainActivity extends Activity {
10-
11- /** Called when the activity is first created. */
12- @Override
13- public void onCreate(Bundle savedInstanceState) {
14- super.onCreate(savedInstanceState);
15- setContentView(R.layout.main);
16- Button toggleButton = (Button) findViewById(R.id.toggleButton);
17- toggleButton.setOnClickListener(new View.OnClickListener() {
18-
19- @Override
20- public void onClick(View v) {}
21- });
22- }
23- }
برای این پروژه یک toggleButton در متد main.xml وارد کنید و به مشخصه ی id آن مقدار toggleButton دهید(خط 13):
1- <?xml version="1.0" encoding="utf-8"?>
2- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3- android:layout_width="fill_parent"
4- android:layout_height="fill_parent"
5- android:orientation="vertical" >
6-
7- <TextView
8- android:layout_width="fill_parent"
9- android:layout_height="wrap_content"
10- android:text="@string/hello" />
11-
12- <ToggleButton
13- android:id="@+id/toggleButton"
14- android:layout_width="wrap_content"
15- android:layout_height="wrap_content"
16- android:text="ToggleButton" />
17-
18- </LinearLayout>
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(22)- اولین اکتیویتی و رویداد
این کد از متد findViewById() استفاده می کند، که در دسترس همه ی اکتیویتی های اندروید است. این متد اجازه می دهد تا هر view درون layout اکتیویتی است و با آن کار می کند را پیدا کند. این متد همیشه یک کلاس View را بر می گرداند که قبل از اینکه بتوانید با این متد کار کنید باید نوع مناسبی برای آن تعیین کنید(cast کنید). در کد زیر(که قطعه کدی از کد قبل است)، شما بازگشتی View از متد findViewById() را به یک Button، cast می کنید(که یک زیر کلاسی از View است).
Button toggleButton = (Button) findViewById(R.id.toggleButton);
بلافاصله بعد از این خط، اداره کننده ی رویداد را تنظیم می کنید.
کد اداره کننده ی رویداد بعد از بازیابی Button از layout در خط قرار گرفته است. راه اندازی اداره کننده ی رویداد به سادگی تنظیم یک new View.OnClickListener است. این شنونده ی click شامل یک متد Click() است که بعد از اینکه دکمه کلیک شده فراخوانی خواهد شد. اینجا جایی است که می خواهم کد اجرای toggle مد بی صدا را قرار دهم.
اگر نوع در فایل layout با آنچه که شما به آن cast می کنید، فرق داشته باشد(شما یک imageview در فایل layout داشته باشید و سعی کنید که آن را به ImageButton ، Cast کنید)، یک خطای زمان اجرا دریافت خواهید کرد. بنابراین مطمئن باشید که به یک نوع مناسب cast کنید.
هنگامیکه شما این کد را در ویرایشگر خود تایپ می کنید، ممکن است برخی خطوط موج دار قرمز دیده شود. مانند تصویر زیر:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(22)- اولین اکتیویتی و رویداد
این خطوط یعنی ایکلیپس به شما می گوید که "من این چیز (Button) را نمی شناسم". اگر مکان نما را روی این خطوط موج دار قرار دهید و برای لحظه ای آن را ترک کنید، یک پنجره ی متن خواهید دید که به شما چندین پیشنهاد می دهد مانند تصویر بالا. در این حالت شما پیشنهاد اول که Import ‘Button’ است را انتخاب کنید. این کار دستور زیر را به بالای فایل اضافه می کند:
import android.widget.Button;
این دستور به ایکلیپس آگاهی می دهد که Button در پکیج اندروید قرار گرفته است. همچنین ممکن است نیاز باشد تا android.view.package را هم وارد کنید.
هنگامیکه شما اپلیکیشن تان را بیشتر توسعه می دهید، ویجت های دیگری را به عنوان بخشی از اپلیکیشن تان قرار می دهید و توجه داشته باشید که باید چند import دیگر را اضافه کنید تا پروژه تان کامپایل شود. در حالیکه این مسئله ی بزرگی نیست و شما می توانید یک متد مختصر نویسی که شامل همه چیز در یک پکیج خاص تهیه کنید و می توانید این کار را با قرار دادن یک ستاره در پایان نام بسته انجام دهید. مانند زیر:
import android.widget.*;
این دستور به ایکلیپس اطلاع می دهد که شامل همه ی ویجت های درون بسته ی android.widget است.
این کد در ابتدا سنگین است و برای یادگیر سخت است. در این نقطه، بهترین کاری که می توانید انجام دهید کد دکمه ی جدید را در یک متدی که شما نی توانید آن را در متد onCreate() فراخوانی کنید، استخراج کنید . برای انجام این کار، نیاز دارید تا یک متد void از نوع private به نام setButtonClickListener() را ایجاد کنید که شامل کد دکمه است. این متد جدید در متد onCreate() فراخوانی می شود. این کد در زیر نشان داده شده است.
1- package net.rasekhoon;
2-
3- import android.app.Activity;
4- import android.os.Bundle;
5- import android.view.View;
6- import android.widget.Button;
7-
8-
9- public class MainActivity extends Activity {
10-
11- /** Called when the activity is first created. */
12- @Override
13- public void onCreate(Bundle savedInstanceState) {
14- super.onCreate(savedInstanceState);
15- setContentView(R.layout.main);
16-
17- setButtonClickListener();
18- }
19-
20-
21- private void setButtonClickListener() {
22- Button toggleButton = (Button) findViewById(R.id.toggleButton);
23- toggleButton.setOnClickListener(new View.OnClickListener() {
24-
25- @Override
26- public void onClick(View v) {
27- // TODO Auto-generated method stub
28- }
29- });
30- }
31- }
17 : در این خط متدی فراخوانی می شود تا شنونده ی کلیک(clickListener) دکمه تنظیم شود.
21 : در این خط متد جدید پیاده سازی می شود.
اکنون زمان آن است که به رویداد کلیک از طریق کد متد onClick() برای دکمه تان پاسخ دهید.
استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع است.



 

 



ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.
مقالات مرتبط