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

ستاره مقاری 1395/1/14 3184

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

باز هم سلام مجدد خدمت دوستان.

خب جلسه پیش یک تمرین دادم . این جلسه میخواهم آن را حل کنم برای شما و یک سری نکات مهم و مفاهیم جدید را باهاش آشنا شویم.

تا اینجا رفتیم که یک layout ساختیم و یک عکس گذاشتیم داخلش

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

به شما گفتم که هر layout باید توسط یک کلاس کنترل بشود. چرا؟ خب دیدیم که در layout ها فقط صفحه دیزاین میکنیم. اما باید طوری بگیم مثلا یک دکمه زده شد چه اتفاقی بیفتد. اینکارها در کلاس هایی به نام اکتیویتی انجام میشود.

خب برای ساخت اکتیویتی گفتم مثل کلاسها عمل کنید. وارد پوشه src بشوید. بعدپوشه com.example.myapp و حالا میبینید یک اکتیویتی آنجا دارید. که در اصل اکتیویتی صفحه اصلی هست.

پس روی پوشه com.example.myapp راست کلیک کرده و بزنید new و سپس بزنید Java class

 

حالا اسم کلاس را بدهید مثلا SecondActivity.

تا الان یک کلاس ساختید فقط. چطور به آن نوع اکتیویتی بودن را نسبت دهیم؟ توجه کنید کلاس یک موجودیت هست(مثال انسان را به یاد بیارید) حالا میخواهیم به آن بگیم "تو موجودیتی باش مثل اکتیویتی ها." اکتیویتی در اصل ساختار اصلیه برنامه­های اندروید هست. layout ها فقط به صفحات ظاهر میدهند اما اصل برنامه های اندرویدی روی اکتیویتی ها بنا شده است.

خب برگردیم سر سوالم. چطور بگیم که تو اکتیویتی هستی؟ از راه ارث بردن. فقط اشاره کنم ارث بردن در زبانهای برنامه نویسی چی هست... دقیقا همان مفهوم ارث بردن خودمان. یک فرزند از پدرش ارث میبرد یعنی خصوصیاتی را از پدرش میگیرد. مثلا رنگ چشم، اخلاق و...

حالا برگردیم به برنامه. متد oncreate .... من میخواهم کلاسی که ساختم هم onCreate داشته باشد. چون که این متد برای کلاسهای عادی  نیست. برای Activity ها هست. خب کافی هست به کلاسم بگم که از Activity ارث ببر.

ارث بردن در جاوا چطور هست؟ با کلمه extend.

پس جلوی اسم کلاستون در بالا مثل من بزنید:

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

بازهم تاکید میکنم (و احتمالا برای آخرین بار) کد را کامل ننویسید. هرجا منوی راهنمای autocomplete باز شد، از آن انتخاب کرده و enter بزنید. دلیل هم دارد. بطور مثال عکس من را ببینید. بالای آن نوشته شده import Activity. کلا import در برنامه نویسی یعنی یه کلاس دیگه ای را به پروژتان اضافه کنید. مثلا اینجا Activity آماده بود ما اوردیمش در کلاسمان یعنی import کردیم.

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

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

که باید خودتون دستی در بالا import را کنید.

اما اگر از لیست انتخابش کنید با زدن enter خودش import را هم انجام میدهد.

خب حالا گام بعدی. ساختن متد oncreate که اگر یادتان باشد بحث bundle و همچنین وصل کردن Activity به layout را روی آن مطرح کرده بودم.

برای این که کامل متوجه بشید دوباره یک پروژه جاوا همانطور که جلسه پیش گفتم بسازیم. پس در file ، new را بزنید بعد project

بعد اولین گزینه java را انتخاب کرده و بدون تغییری و انتخاب چیز دیگری، پروژتان را بسازید.

مثل جلسه قبل یک کلاس بسازید اسمش را مثلا بدید A.

حالا بریم داخل A و همانطور که یاد دادم یک متد تعریف کنید مثلا به اسم Printing:

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

 

کلمه کلیدی public را جلسه بعد میگم چ هست. شما فقط بنویسیدش. Void که گفتم ینی تابع خروجی نداره.

داخل تابعم دستور چاپ را نوشتم. حالا یک کلاس بسازید به اسم B. و با کلمه extend بگید از A ارث ببرد . بعد داخل کلاس بنویسید

@Override

که با O بزرگ هست.

این یعنی چی؟ وقتی که از یک کلاس ارث میبرید و کلاس شما یک سری متد دارد لازم نیست عینا آن متد اجرا شود. میتوانید اصلا عوضش کنید. و فقط متد را اسم و ورودیش را داشته باشید و محتوای آن را تغییر بدهید. مثلا کلاس حیوانات همه یک متد دارند به اسم خوردن. حالا همه ی حیوانات از جمله شیر و گوزن از این ارث میبرند پس یکی خوردنش مثلا سبزیخواره یکی گوشت خوار!

الان اینجا میخواهم همان متد printing داخل A را استفاده کنم اما به جای آن چاپ کنم hi I am B

خب زیر این Override که نوشتید دقیقا همان متد داخل A را بنویسید. یا کپی کنید. و فقط متن چیزی که چاپ میشود را تغییر بدهید.

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

فقط اگر اشتباه بنویسید مثلا نام کلاس را، Override به شما خطا میگیرد. میتوانیم متد را تست کنیم. گفته بودم که برای اجرای کد به متدی بنام main احتیاج داریم. آن را پس بنویسید تا تابعمان را فراخوانی کنیم.

پس کد کلاستون الان اینطور هست:

public class B extends A {


    @Override
    public void printing(){
        System.out.print("hi i am B");
    }

    public static void main(String args[]){
       
    }
}

داخل main میخواهم الان کلاسم را صدا بزنم. یادتان باشد یک مثال انسان زدم گفتم نمیتونم بگم انسان بیا. باید بگم فلانی که انسان هستی بیا.

اینجا هم نمیشود الان کلاسم را بهش بگم متدت را اجرا کن . بلکه یه نمونه ازش میگیرم. میگم حالا فلانی که از نوع B هستی متدت را اجرا کن. برای نمونه  گرفتن کد زیر  را داخل main بنویسید:

B myb = new B();

این جمله را بخوانید. قشنگ نمونه گرفتن را بیان میکند. و اسم نمونه هم myb هست.

حالا به نمونه تان بگید تابعش را اجرا کند

myb.printing();

وبرای اینکه نتیجه را ببینید از  منوی  بالا Run را بزنید و در آن دوباره گزینه Run را انتخاب کنید:

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

 

خب دیدید که تابع درست Override یا بازنویسی شده و خروجی را هم میبینید

حالا برید داخل کلاس A و یک متد دیگر بصورت زیر بسازید:

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

اندفعه میخواهم نشان بدهم اگر متد تابعی که از آن ارث میبریم را تغییر ندهیم بهش دسترسی داریم اما عینا همانطور که تعریف شده است اجرا میشود. پس داخل کلاس B جای

myb.printing ();

بنویسید:

myb.printing2();

و اجرا بگیرید. میبینید که متد از A دقیقا به ارث رسیده است

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

 

مفاهیمی که از جاوا لازم بود را دوره کردیم. حالا برگردیم به اندروید. سر متد Oncreate بودیم که این بحثها پیش آمد. این متد هم برای Activity هست اما مشخص هست که من باید تغییرش بدهم مثلا بگم که این کلاسی که برای آن OnCreate ساختی به کدام layout وصل هست. پس باید تغییرش بدهم.

پس کد زیر را بنویسید:

@Override

public void OnCreate(Bundle bdl){}

با Bundle هم که اشنا هستید. یک نوع Bundle تعریف کردم اسمش را هم دلخواه دادم bdl.

حالا کدهای زیر را به متدتان اضافه کنید:

@Override

public void onCreate(Bundle bdl) {

    super.onCreate(bdl);

    setContentView(R.layout.second);

}

خط اول که مشخص هست همان کاری که Bundle  گفتم انجام میدهد را برایش تنظیم کردیم.

خط دومم اکتیویتی ما را به layout دوممان وصل کرده است. R هم گفتم فعلا درین حد بدانید که برای صدا زدن ابزارهایی که روی صفحه میگذاریم یا Layout ها از R استفاده میکنیم.

 

حالا بریم به اکتیویتی اصلی مان یعنی MyActivity  و به آن بگیم روی دکمه که زده شد بیاد به SecondActivity.

پس یک دکمه روی Layout main بندازید. ایدیش را هم بگذارید btnSecondPage

 

برید داخل اکتیویتی مربوط به این صفحه (MyActivity ) و داخل متد OnCreate اش یک onclickListener  برای دکمتان بسازید. چون قبلا گفتم اینها را وارد جزییاتش نمیشوم. کد بصورت زیر هست:

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

 

که البته خود تعریف دکمه هم توضیحاتی دارد که در جلسات بعد خواهیم پرداخت.

حالا در onClick بنویسید:

Intent myintent = new Intent(MyActivity.this,SeconActivity.class);

این چی هست؟ اگر دقت کنید یک نمونه گرفتیم از موجودیتی به نام Intent که اسم آن را دادم myintent

حالا در نمونه گرفتن از کلاس A که داشتیم یادتان باشد میگفتیم

A mya = new A();

و جلوی اسم A پرانتز داشتیم. این پرانتز میتواند با ورودی پر بشود که بسته به کلاستان دارد (بعدا مثال جاوای آن را میزنم). اما اینجا هم دارید میبینید. Intent برای نمونه گرفتن دوتا ورودی میخواهد. چیز سختی هم نیست، داریم به آن میگوییم از کجا میخواهم بروم کجا!

 

و حالا intent چی هست

Intent  ها مثل پیام هایی هستند که با آنها از سیستم اندرویدتان تقاضای کاری را میکنید. در واقع Intent ها وقوع یک رویداد را به اندروید اعلام میکنند. مثلا بخواهیم آدرسی را در مرورگر اندروید باز کنیم یا الان اینجا میخواهیم به صفحه ای برویم.

برای رفتن از یک صفحه به صفحه دیگر  intentرا بصورت بالا تعریف میکنیم. که به آن intent صریح هم میگویند.

خب intent را تعریف کردیم حالا باید start بکنیم آن را. کد پایین را زیره کد بالایی بنویسید:

startActivity(myintent);

کد نهایی من بشکل زیر است:

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

برنامتان را همانطور که گفتم اجرا کنید. اما روی دکمه که میزنید برنامه خطای has stopped خواهد داد.

دلیلش چیست؟ قبلا گفتم یک فایلی داریم به اسم manifest که از منوی سمت چپ پیداش میکنید. یک فایل xml هست. این فایل شناسنامه برنامه تان هست. هر کاری بکنید باید به آن بگید. مثلا اکتیویتی تعریف میکنید باید اینجا اعلام کنید. یا مثلا دیدید یک برنامه ای را نصب میکنید اولش  اعلام میکند  این برنامه به چه چیزایی دسترسی دارد؟ به اینها میگیم permission.

اگه مثلا از وای فای استفاده میکند برنامتان باید اینجا اعلام کنید  که برنامه من این قصد را دارد وگرنه برنامتان به خطا میخورد. حالا اینجا کافی هست که توی این فایل xml که یاد دادم کار با آن را اسم اکتیویتی که اضافه کردیم را اعلام کنیم.

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

application

را پیدا کنید. شروع و پایانش را که بلدید پیدا کنید. داخلش ببینید یه تگ هست به نام

activity

که اگر نگاه کنید در ادامه اولش نوشته شده

name="MyActivity"

ما چنین چیزی باید بسازیم اما کل این تگ لازم نیست عینا نوشته شود. این تگ چون تگ اصلی هست یک سری ویژگی ها باید به آن تنظیم می شده که شده. شما فقط آخر این تگ activity و البته همان داخل تگ application یک تگ activity دیگر تعریف کنید و بصورت زیر به آن مقدار بدید:

و در آخر:

خب تمام. برنامه را اجرا کنید و لذت ببرید.

امیدوارم این آموزش برای شما مفید بوده باشه.

قسمت بعدی قسمت قبلی