سرفصل مطالب
درس اول: معرفی اپلیکیشنی که خواهیم ساخت
– معرفی اپلیکیشن این آموزش آنگونه که در پایان خواهد شد
– ما در این اپلیکیشن منو داریم
– ما در این اپلیکیشن منوی کشویی داریم
– در این اپلیکیشن ارتباط بین صفحهها با گراف Navigation طراحی شده
– همه صفحهها در این اپلیکینش فرگمنت هستند
– گزینه اشتراک گذاری داریم
– گزینه رفتن به یک وب سایت داریم
– گزینه تماس تلفنی داریم
– هنگام حرکت بین صفحهها انیمیشن داریم
– گزینه بازگشت مدیریت شده طوری که گاهی دو گام به عقب برمیگردیم
– هنگام حرکت بین صفحهها میتوانیم دادههایی را با خود ببریم
درس دوم: فرگمنت چیست؟
– فرگمنت چیست و چه کاربردی دارد؟
– معرفی فرگمنت از اندروید 3.0
– جایگاه فرگمنت به عنوان یک View و تفاوت آن با View
– فرق فرگمنت (Fragment) و اکتیویتی (َزActivity)
درس سوم: مسیردهی یا نویگیشن چیست؟
– مسیردهی یا navigation در اندروید چه جاهایی شنیده میشود؟
– مسیردهی سنتی با حرکت بین اکتیویتیها
– مسیردهی نوین اندروید با حرکت بین فرگمنتها
– مفهوم پشته (Back stack) اکتیویتی و فرگمنت
– نگاههای طراحی اپ با ترکیب اکتیویتیها و فرگمنتها
– اولین آشنایی با فایل nacigation.xml
درس چهارم: معرفی پروژه و و سورس آن
– آشنایی با پروژه مورد استفاده در این فصل
– چرا پروژه آماده؟
– راه اندازی پروژه در اندروید استودیو
– اجرای پروژه در ماشین مجازی (AVD)
درس پنجم: ایجاد فرگمنت و افزودن آن به اکتیویتی در اندروید
– ایجاد یک فرگمنت Fragment خالی
– استفاده از DataBindingUtil برای بایندینگ لیوت در زمان کامپایل
– شرح متد inflate از DataBindingUtil
– تغییر Color Scheme اندروید استودیو در ادیتور
– مفهوم بایندینگ در اندروید
– افزودن تگ فرگمنت به لیوت اکتیویتی
– مفهوم ویژگی name در تگ fragment
درس ششم: حرکت بین فرگمنتها با طراحی گراف نویگیشن
– آشایی با گراف navigation.xml در یک نگاه
– سه قاعده طراحی گراف navigation
– هفت گام طراحی گراف navigation
– افزودن وابستگیهای فریمورک navigation به گریدل app
– متغیر ext جیست و در گریدل چه میکند
– افزودن فایل navigation.xml و طراحی فرگمنتها و اکشنها
– افزودن navHostFragment به اکتیویتی main
– آشنایی با ویژگی defaultNavHost
– آشنایی با ویژگی navGraph
– تنظیم clickListener برای فراخوانی اکشن حرکت بین فرگمنتها
– استفاده از متد findNavController برای یافتن Navigation Controller-
درس هفتم: مسیردهی شرطی
– ارتقای گریدل (Gradle) پروژه و نکات احتیاطی
– افزودن فرگمنتهای پیروزی و شکست بازی به گراف navigation
– رفتن به یک فرگمنت در کلاسها بر اساس منطق برنامه
درس هشتم: طراحی نحوه بازگشت به صفحههای قبلی
– چطور پس از ورود باید فرگمنت لاگین را حذف کرد
– مثال از پروژه دوره (چطور از فرگمنت نتیجه به فرگمنت اول برگردیم)
– آشنایی با ویژگی POP Behavior در Navigatio
– تنظیم Pop To و Inclusive برای اصلاح Back Stack
درس نهم: پیاده سازی دکمه بازگشت در نوار بالایی
– توضیح چرایی وجود دکمه UP
– آشنایی با کلاس NavigationUI در ;کامپوننت Navigation
– پیاده سازی متد findNavController در اکتیویتی
– متد setupActionBarWithNavController در NavigationUI
– بازنویسی متد onSupportNavigateUp
– متد naigateUp از کلاس NavControler
– تعریف تمرین برای تحقیق بیشتر
درس دهم: افزودن منو به اپلیکشین
– آشنایی با Options Menu
– یادآوری منو از HTC Dream G1 در سال 2008
– کاربرد Options Menu در اپلیکیشنهای اندرویدی
– گامهای اضافه کردن منو در اندروید
– ایجاد فایل xml از نوع menu در اندروید
– طراحی Menu Item در فایل xml
– افزودن مقصد گزینه منو به گراف نویگیشن
– افزودن setHasOptionsMenu به فرگمنت
– Override کردن متد onCreateOptionsMenu
– Overrinde کردن متد onOptionsItemSelected
– نقش Navigation در بهبود پیاده سازی منو در اندروید
درس یازدهم: انتقال داده هنگام جابجایی بین فرگمنتها
– آشنایی با انتقال اطلاعات بین صفحههای اپلیکیشن
– آشنایی با Bundle و انتقال اطلاعات با putExtra
– آشنایی با مفهوم Key و Value در getExtra
– آشنایی با SafeArgs در کامپوننت Navigation
– افزودن پلاگین گریدل SafeArgs در gradle.project و gradle.app
– استفاده از کلاس Directions برای انتقال داده به مقصد
– تعریف Argument در گراف Navigation
– استفاده از کلاس Args برای دریافت آرگومانها از باندل
– تغییر اکشن ها از حالت خام به حالت SafeArgs در اندروید
درس دوازدهم: مفهوم اینتنت در اندروید و انواع آن
– تفاوت طراحی با اکتیویتی و فرگمنت
– امکان حرکت از یک اکتیویتی به اکتیویتی دیگر در اپ دیگر
– مفهوم Intent برای اعلام حرکت به Activity جدید به سیستم عامل
– مفهوم Explicit Intent برای حرکت به اکتیویتی مشخص
– مفهوم Implicit Intent برای اعلام نیاز به سیستم عامل و تعیین مقصد با سیستم عامل
– مفهوم Action در Intent و انواع آن
– مفهوم Category در Intent و انواع آن
– مفهوم MIME و Data Type در اندروید
– بررسی Intent-filter در manifest
– بررسی نمونههای دیگر Intent در مستندات اندروید
درس سیزدهم: اشتراک گذاری محتوا در اندروید
– تعریف مثال برای اشتراک گذاری محتوا
– ایجاد منوی اشتراک گذاری
– ویژگی visible و enabled و showAsAction در منوهای اندروید
– افزودن تصویر به منو در اندروید
– ایجاد منو در کلاس فرگمنت «برنده شدن«
– رفتن از یک اکتیویتی به اکتیویتی دیگر در یک اپلیکیشن
– مفهوم Activty.class.java
– نوشتن Intent از نوع ACTION_SEND
– قرار دادن متن با putExtra در اینتنت
– تعیین MIME Type از نوع متن خام
– آشنایی با کلاس ShareCompat
– مدیریت خطای نبود اکتیویتی برای اشتراک گذاری
درس چهاردهم: مفهوم و پیادهسازی منوی کشویی
– مفهوم منوی کشویی یا Navigation Drawer
– آشنایی با کتابخانه متریال گوگل (Google Material Library)
– اشنایی با وب سایت Material.io
– طراحی بر اساس اصول متریال دیزاین گوگل
– آشنایی با Navigation View
– گامهای اضافه کردن منوی کشویی در اندروید
– افزودن کتابخانه متریال گوگل به گریدل اندروید
– طراحی منوهای Drawer و هدر آن
– تگ DrawerLayout و NavigatioView
– آشنایی با متد setUpWithNavController
– سپردن navigateUp به NavigatioUI
درس پانزدهم: جلوگیری از باز شدن ناخواسته منوی کشویی
– آشنایی با اینترفیس addOnDestinationChangeListenr
– آشنایی با کلاس NavDestination
– آشنایی با فلگ LOCK_MODE
– گرفتن ID فرگمنت آغازین از NavController
درس شانزدهم: رویداد کلیک روی گزینههای منوی کشویی
– امکان تعریف listenr در Navigation Drawer برای گزینه
– تعریف گزینه در منوی نویگیشن با id متفاوت از فرگمنتهای موجود
– متد setNavigationItemSelectedListener از NavigationView
– ایمپلمنت کردن اینترفیس OnNavigationItemSelectedListener
– تشخیص آیتم منوی کلیک شده از روی id و مدیریت کلیک آن
درس هفدهم: اجرای اینتنتهای متداول روی گزینههای منوی کشویی
– آشنایی با ACTION_VIEW برای Intent باز کردن یک url وب سایت
– طراحی گزینه اینستاگرام در منوی کشویی به همراه آیکن متریال
– آشنایی با متد setData برای ارسال URI به اینتنت
– آشنایی با ACTION_DIAL برای ارسال Intent اجرای تماس تلفنی
– مرجع شناسی برای دیگر اینتنتهای مرسوم اندروید مثل دوربین، نقشه و …
درس هجدهم: ایجاد انیمیشن در هنگام جابجایی بین صفحههای اپلیکیشن
– آشنایی با امکان تعریف Animation در اکشنهای گراف Navigation
– انیمیشنهای آماده در کامپوننت نویگیشن
– نحوه ایجاد یک انیمیشن xml در اندروید در پوشه anim
– آشنایی با مفهوم alpha در انیمیشنهای اندروید
– آشنایی با مفهوم translate در انیمیشنهای اندروید
– آشنایی با ویژگیهای fromAlpha و toAlpha و duration
– تشریح مختصات نسبی x و y در اندروید برای پویانمایی جابجایی
– ویژگیهای fromXDelta و toXDelta و fromYDelta و toYDelta
– ویژگیهای Enter و Exit و Pop Enter و Pop Exit در انیمیشنهای گراف
درس نوزدهم: جمع بندی
– نکتههای پایانی
– ایدههایی برای ادامه کار
اسفند (خریدار محصول) –
دوستان برای جل مشکل میتونید این تغییرات رو انجام بدین.
https://github.com/google-developer-training/android-kotlin-fundamentals-apps/pull/304/files
مصطفی آصفی –
سلام و سپاس که برای راهنمایی دوستانتون وقت می گذارین. بنده البته مدتی هست که اندروید کار نمی کنم و ذهنم روی این موضوع آماده نیست که لینک رو ارزیابی کنم ولی همین که وقت گذاشتین برای راهنمای جای سپاس داره.
اسفند (خریدار محصول) –
سلام وقتتون بخیر
من خیلی تلاش کردم تا مشکل سینک شدن گریدل (Could not install Gradle distribution from ‘https://services.gradle.org/distributions/gradle-4.10.1-all.zip’.
Reason: java.net.SocketTimeoutException: Read timed out) پروژه ی Android Trivia رو حل کنم موفق به پیدا کردن جوابی توی گوگل نشدم
توی نظرات اشاره کردین که تو قسمت نظرات فصل 4 توضیح دادین که من همچین نظری ندیدم اگه ممکنه یه بار دیگه توضیح بدین ممنون میشم
بابک –
با سلام
من دوره جامع رو خریدم و یه سوال دارم.اگه پروژه ما چندتا اکتیویتی و هر اکتیویتی هم چند فرگمنت باشه باید یک نویگیشن گراف ایجاد کرد یا برای هر اکتیویتی یک گراف جداگانه
متشکرم اگه راهنمایی بفرمایید
مصطفی آصفی –
سلام وقت بخیر. برای هر اکتیوینی یک گراف مجزا ایجاد کنید. اما در کل معماری توصیه شده اینه که طرح رو تا حد ممکن تو یک اکتیویتی با چند فرگمنت پیش ببرید. البته من مدتی هست که دیگه اندروید کار نمی کنم و اندروید مدام تغییر سیاست داره. باز خودتونم تحقیق کنید. گفتگوهایی مثل این (+) رو گوگل و مطالعه کنید.
رضا طاهری فرد (خریدار محصول) –
سلام وقت بخیر
امکانش هست در مورد() binding.invalidateAll توضیح بدهید
و چه زمانی باید ازش استفاده بشه
مصطفی آصفی –
سلام به شما. برای آزادسازی ویو و گرفتن مقدارهای جدیدی در مورد ویوهای بایند شده استفاده میشه
محمد حسین جربان (خریدار محصول) –
سلام خسته نباشد
ببخشید من تو راه اندازی گریدل به مشکل خوردم و داخل قسمت چهار که گفتید پروژه رو بیاریم نمیتونه اونو سینک کنه و این مشکل رو داره
Could not install Gradle distribution from ‘https://services.gradle.org/distributions/gradle-4.10.1-all.zip’.
چه پیشنهادی دارین که این رو دقیق یاد بگیم ؟ ممنون
مصطفی آصفی –
سلام سلامت باشین. بخش نظرات فصل ۴ هم پرسیده بودین اونجا راهنمایی کردم لطفا اون نظر رو با دقت بخونید.
رضا طاهری فرد (خریدار محصول) –
سلام وقتتون بخیر
ممنونم بابت اموزش خوبتون امیدوارم که همیشه سلامت و موفق باشید
یک سوال داشتم
یک پروژه از داخل اینترنت میخوام روی اندروید استودیوم باز کنم که این پروژه ورژن پلاگین گریدلش 3.3 است و ورژن پلاگین گریدل اندروید استودیو من 7.3
است و موقع باز کردن پروژه خیلی ارور میده
با vpn هم باز میکنم بازم ارور میده
الان من باید ورژن پلاگین اندروید استودیو رو بیارمش روی 3.3 ؟ و چطوری؟
ممنون میشم کمکم کنید
مصطفی آصفی –
سلام مجدد. مشابه توضیح قبلی که خدمتتون دادم این بار هم شما می تونید گوگل کنید: how downgrade gradle plugin in android studio
این پست آموزش بازگشت نسخه گریدل (+) می تونه از جمله موارد مفید باشه.
پینوشت: اصولا یه برنامه نویس حرفه ای امروز بیش از هر مهارتی باید مهارت جستجو و پیدا کردن جواب داشته باشه. کدنویس حرفه ای ممکنه برنامه ای بسازه که همه بخش های اون با جستجو و پیدا کردن نمونه کد از فروم های مختلف سر هم شده باشن و فقط خودش معماری و مهندسی کرده باشه که پروژه چطور بهینه کار کنه.
رضا طاهری فرد (خریدار محصول) –
سلام وقت بخیر
واقعا از تدریس خوبتون تشکر میکنم
به جرات میتونم بگم واقعا مفهومی تدریس میکنید و چقدر بیان خوبی دارید خیلی ساده و روان توضیح میدین. واقعا لذت میبرم امیدوارم که همیشه سلامت و موفق باشید. در فصل 3 فیلم شماره 6 یک پروژه قرار دادین با اینکه vpn وصله ولی ارور 10:36 AM Gradle sync failed: Read timed out (6 m 42 s 362 ms)
skipped due to earlier error
میده میشه راهنمایی بفرمایید
خیلی ممنونم
مصطفی آصفی –
سلام و سپاس از انرژی خوبتون. بنده هم امیدوارم تندرست و موفق باشین. در مورد خطای دریافتی اندروید مدام به روز میشه و گریدل هم به مشکلات متعددی می خوره که گاهی به دلیل مشکلات اتصال، گاهی به دلیل تنظیمات سیستم شما و گاهی به دلیل ناسازگاری و باگ توسعه دهنده های هسته اون هست. خوشبختانه ولی اندروید اکوسیستم بزرگی داره و توصیه می کنم دست به گوگل باشین چون باید بتونید به سرعت راهکارهای مختلف رو آزمایش کنید. مثلا این خطا رو اگه گوگل کنید ممکنه مطابق این لینک استک اورفلو (+) با حذف gradle.properties و دانلود مجدد فایل های از دست رفته درست بشه.
آریا ماهاور (خریدار محصول) –
سلام
در قسمت 13 مبحث SafeArgs ، کلاس GameFragmentDirection نمایش داده نمی شود. لطفا راهنمایی بفرمایید
مصطفی آصفی –
سلام به شما. طبیعتا چون کدتون رو نمی بینم فقط می تونم بگم اگه با re-build پروژه مشکل حل نشد، احتمالا یک جای کار دارید اشتباه ریزی می کنید. این مشکل (+) رو برای مثال ببینید.
ابوالقاسم خلج –
سلام
جناب آصفی درساتون در زمین کاتلین که من می خونم خیلی عالی است
بسیار ممنون از دریس عالی شما
من یه مشکلی دارم چطور می تونم با شما این مشکل را درمیان بگذارم؟
لطفا کمکم کنید
تشکر از دریس عالی شما
مصطفی آصفی –
سلام و ممنون از شما. لطفا همین جا بپرسید.
راستش مشکلات فنی رو بنده ایمیلی و شخصی بررسی نمی کنم. چون واقعیتش به سختی زمان باز می کنم برای بررسی چنین مواردی، ترجیح میدم که اگر قراره وقت صرف بشه دست کم همین جا در بخش نظرات باشه که اگر جوابی داده شد برای نفرات بعدی هم قابل استفاده باشه.
حسین –
سلام بزرگوار
ایا در این دوره آموزشی راجب این موضوع صحبت کردین
زمانی که کاربر روی ایتم recyclerview کلیک می کنه و اون رو میره توضیحاتشو مطالعه می کنه که توی استک ریخته میشه حالا زمانی که backstack میشه کاربر اگر روی ایتم 50 کلیک کرده باشه مجددان state کاربر بهم میرزه میره داده رو از اول می گیره ایا شما تونستین این مشکل رو برطرف کنید.
مصطفی آصفی –
سلام به شما. خیر در این دوره در رابطه با ریسایکلر صحبت نشده.
لطفا برای آشنایی با جزپیات دوره سرفصل های اون رو در انتهای توضیحات مطالعه بفرمایید.
sepehr (خریدار محصول) –
سلام
ممنون از آموزش خوبتون
سوالم مربوط به دیتابایندینگ است.
بعضی از لیوت ها در ویوگروپ لیوت قرار گرفته اند اما از متغیری در سطح لیوت استفاده نکردیم پس عملا دلیلی برای استفاده از دیتابایندینگ وجود نداشته.
چرا در لیوت TitleFragment از دیتابایندینگ استفاده شده اما در لیوت RulesFragment از دیتابایندینگ استفاده نشده است.
لطفا درباره منطق کلاس GameFragment هم توضیح دهید.
مصطفی آصفی –
سلام به شما دوست عزیزم و می بخشی که جواب شما کمی دیر شد.
ببینید هدف این پروژه شبیه سازی حرکت بین صفحه ها در گراف نویگیشن به صورت استاندارد هست؛ شما با دانشی که در فصل های گذشته و انشالله دو فصل 5 و 6 در آینده به دست میارید می تونید به عنوان تمرین بایندینگ یا حتی معماری MVVM رو به تمامی روی این اپ و مثال های دیگه در فصل های قبلی پیاده کنید.