ایجاد و نمایش اکتیویتی جزئیات یا یک detail activity
درس حاضر که در لینکی که ارائه شده تعبیه شده است، به شما آموزش میدهد چگونه یک Detail Activity حرفهای در توسعه اپلیکیشنهای اندروید ایجاد و مدیریت کنید. در این درس، با استفاده از Android Studio یک Activity جدید ساخته و Layout آن را با المانهایی نظیر TextView و ImageView طراحی میکنید، سپس با بهرهگیری از Intent دادهها را از Activity اصلی به Detail Activity منتقل کرده و آنها را دریافت و نمایش میدهید. همچنین، نحوه مدیریت تعاملات کاربر با Listenerها، بهینهسازی عملکرد با تکنیکهایی مثل lazy loading و کتابخانههای Glide و Picasso، و سازگاری با اندازههای مختلف صفحه و چرخه حیات Activity را فرا میگیرید. این آموزش که با نکات کلیدی برای توسعهدهندگان حرفهای همراه است، شما را قادر میسازد تا تجربه کاربری پویا و بهینهای خلق کنید و مهارتهای ضروری برای بازار کار را کسب نمایید—پس با تماشای ویدیو، دانش خود را ارتقا دهید!
وقتی کاربری روی یکی از آیتم های این لیست کلیک میکنه، انتظار داره جزییات مربوط به آیتمی که انتخاب کرده رو ببینه. در اندروید راه های زیادی برای انجام اینکار وجود داره، ولی ساده ترین راه این هست که با زدن هر آیتم وارد اکتیویتی جدیدی با نام Detail Activity بشیم و جزییات مربوطه رو نمایش بدیم. در حال حاضر میبینید که میتونم لیست ویو ام رو اسکرول کنم و بالا و پایین ببرم ولی وقتی هر آیتم رو لمس میکنم هیچ اتفاقی نمیافته و بازخوردی دریافت نمیکنم. برای سفارشی سازی دیدن جزییات مربوطه، من یک اکتیویتی جدید ایجاد میکنم و بعد کدهایی برای رفتن به اون اکتیویتی رو به برنامه ام اضافه میکنم.
من در حال کار کردن روی پروژه ای به نام Detail Activity هستم و کارم رو با ساخت یک اکتیویتی جدید در اندروید استودیو شروع میکنم. منوی فایل رو باز میکنم، گزینه New و بعدش Activity و بعد قالب Blank Activity رو انتخاب میکنم و اسم این اکتیویتی رو Detail Activity میذارم. این؛ اکتیویتی لانچر یا همون اکتیویتی اولیه که لحظه اول میاد بالا؛ نیست، و همچنین قصد ندارم از فرگمنت استفاده کنم. میخوام یک حالت سلسله مراتبی از اکتیویتی ها ایجاد کنم که با عملی در اکتیتویتی اصلی وارد این اکتیویتی جدید بشم و با زدن دکمه بک در این اکتیویتی برگردم به همون اکتیویتی اصلی ام. به عبارت دیگه هدف این هست که با زدن هر آیتم از لیست ویوی موجود در اکتیویتی اصلی برنامه ام وارد این اکتیتویتی بشه و وقتی که دکمه بک گوشی رو زدم برگردم به اکتیویتی اصلی و لیست ویو ام. پس Hierarchical Parent رو از طریق پنجره Select Activity روی Main Activity تنظیم میکنم.
و روی Finish کلیک میکنم. خب چند تا فایل جدید ایجاد شد. اول بیاید یک نگاهی به کلاس Detail Activity بندازیم. مثل سایر اکتیویتی هایی که داشتیم این کلاس از AppCompat Activity، extends شده. این کلاس یک فایل لایوت جدید رو لود میکنه که شامل جزییات اکتیویتی یا همون activity_detail میشه و چون این اکتیویتی یک اکتیویتی ثانویه هستش کد مربوط به نمایش آیکن پیکان بالایی؛ که برای بازگشت به اکتیویتی قبلی هست؛ رو هم داره. روی فایل لایوت که مربوط به جزییات این کلاس یعنی activity_detail میشه؛ بعد از فشار دادن دکمه کنترل کیبوردم در ویندوز یا کامند در مک؛ کلیک میکنم و وارد code view اون میشم و میبینیم که این فایل هم عین بقیه فایل های اکتیویتی ها هستش.
یک Coordinator Layout داره، و یک Toolbar و یک دکمه Floating Action Button که میتونید بذارید بمونه یا دیلیتش کنید. یک تگ include هم برای اتصال به ContentDetail.XML داره. که این فایل فقط یک relative layout داره. این جا جایی هست که میتونید کنترل های بصری رو، برای نمایش جزییات داده های مورد نظرتون قرار بدید. حالا میخوام این قسمت رو با یک قطعه کد از گیت هاب جایگزین کنم.
میتونید با این URL برید و این کد رو پیدا کنید. من کل این کد XML رو انتخاب و کپی میکنم و بعد برمیگردم به اندروید استودیو و کل کدهای اولیه این فایل رو پاک میکنم و کدهایی که از گیت هاب کپی کرده بودم رو اینجا پاست میکنم. خب در این فایل به یک رشته ای که وجود نداره با نام Lorem Ipsum، ارجاع داده شده، پس میام و اون رو با ارجاع به رشته About _Text جایگزینش میکنم.
این متنی که دارید میبینید در واقع فقط یک متن فرضی برای دیدن ظاهر لایوت در Design Viewهستش و اون متنی نیستش که وقتی داریم جزییات مربوط به هر آیتم لباس برنامه مون رو نگاه میکنیم نمایش داده میشه و قرار هست وقتی هر آیتم رو زدیم جزییات مربوط به همون آیتم نمایش داده بشه. کامپوننت های دیگه ای هم اینجا در این لایوت هستن. یک Text View برای نام product یا محصول، و همینطور یک Text View دیگه برای قیمت مربوط به اون محصول. بعد درست مثل اکتیویتی About یک Scroll View داریم که داخلش یک Text View هستش و اون هم برای اینکه این، متن جزییات کمی طولانی هست، و نیاز به اسکرول کردن داره؛ بیاد و اون جزئیات طولانی رو در نمای اسکرول سفارشی کنه.
و نهایتا یک Image View برای نمایش تصویر مربوط به اون محصول. اگه بریم یک نگاهی به Design View بندازیم به صورت تقریبی میبینیم که لایوت مون چه شکلی در میاد. حالا باید یکسری کد هم به کلاس Main Activity ام اضافه کنم، تا وقتی کاربر روی آیتمی از لیست ویو کلیک کرد وارد این اکتیویتی بشه. با استفاده از اسکرول کردن میام پایین در آخر متد on Create. و یک کد برای کنترل عمل کلیک کردن با نام on ItemClickListener رو اضافه میکنم. این متد رو برای شی lv که همون لیست ویوی ما بود صدا میزنم.
و set OnItemClickListener رو فراخونی میکنم، و برای پیاده سازی ورودی ناشناس مون یک رابطی با نام on ItemClickListener رو بهش میدم. اگه اول نام این رابط رو تایپ کنم کاملش توسط اندروید استودیو با این لیست به من پیشنهاد داده میشه و میتونم انتخابش کنم و میبینیم که داخلش یک فراخونی از متد on ItemClick رو داره. دقت کنید این خیلی مهم هست که نام این متد on ItemClickListener هست و نه on ClickListener خالی. بد نیست بدونید ما از on ClickListener فقط برای دکمه ها و سایر اشیای تکی استفاده میکنیم.
ولی وقتی در حال کار با چیزی شبیه به فراخونی یک AdapterView از یک List View هستیم، ما باید از on ItemClickListener استفاده کنیم چون دستوراتی که قرار هست برای کلیک کردن روی اون لیست ویو تعریف کنید ممکن هست برای هر آیتم از اون لیست متفاوت باشه. در این متد این کد رو اضافه میکنم. یک شی intent ایجاد میکنم و مثل قبل با استفاده از سازنده intent معرفی اش میکنم، و از نسخه ای از سازنده اون که به یک context و یک کلاس احتیاج داره استفاده میکنم. برای context از عبارت MainActivity .this استفاده میکنم. یعنی همین کلاسی که دارم روش کار میکنم.
دقت کنید من نمیتونم از عبارت this خالی استفاده کنم چون ممکن هست منظورم از this شی Click Listener باشه. ولی من میخوام به اکتیویتی ای که دارم روش کار میکنم ارجاع بدم. بعد Detail Activity.class رو وارد میکنم و این یعنی میخوام یک نمونه از کلاس Detail Activity رو ایجاد و نمایش بدم. بعد متد start Activity رو صدا میزنم و این intent که ساختم رو بهش میدم. تا اینجای کار فقط اکتیویتی جزییات رو، ایجاد کردم؛ ولی هنوز اون رو برای هر آیتم از لیست ویو سفارشی اش نکردم به طوری که الان با انتخاب هر آیتم جزییات ثابتی نمایش داده میشه. من این کار رو بعدا انجام میدم ولی فعلا این کدهایی که نوشتم رو تست میکنم که مطمئن بشم با لمس هر آیتم وارد اکتیویتی جزییات یا DetailActivity میشیم.
و حالا میتونم هر آیتم از لیست رو انتخاب کنم و به Detail Activity برم و وقتی دکمه بک دستگاه رو فشار دادم و یا اون آیکن پیکان موجود در اکشن بار رو زدم برمیگرده به Main Activity. تا اینجا همه چی خوبه. و دیگه الان من در اپلیکیشن ام خیلی راحت می تونم بین اکتیویتی ها رفت و اومد کنم. ولی الان باید این Detail Activity سفارشی بشه تا جزییات مربوط به همون آیتمی که روش کلیک میشه رو نمایش بده.
در ویدیوی بعدی با ما همراه باشید تا این بحث رو آموزش بدم.