NavigationUI یکی از فیچرهای Navigation conponent هست که عنوان تولبار (یا همون اکشن بار) رو با تغییر فرگمنت تغییر میده و همچنین فلش Navigate up رو اضافه میکنه (بجز فرگمنت home).
NavigationUI یکی از فیچرهای Navigation conponent هست که عنوان تولبار (یا همون اکشن بار) رو با تغییر فرگمنت تغییر میده و همچنین فلش Navigate up رو اضافه میکنه (بجز فرگمنت home).
اگر از اکتیویتی مبدا به اکتیویتی مقصد برویم و نیاز باشد از اکتیویتی مقصد اطلاعاتی به اکتیویتی مبدا آورده شود از startActivityForResult برای رفتن به اکتیویتی مقصد استفاده می کنیم.
توی اکتیویتی مقصد یک Intent جدید تعریف میکنیم و دیتاها رو بهش متصل می کنیم و قبل از finish کردن setResult را قرار می دهیم.
از کامپوننت ItemTouchHelper برای swipe یا move کردن آیتم های ریسایکلر ویو استفاده می شود. مثلا در کد زیر با swipe کردن به چپ یا راست، آیتم مورد نظر حذف خواهد شد. کد هایلایت شده نحوه معرفی این ویژگی به ریسایکلر ویو را نشان می دهد.
DiffUtil یک کلاسی هست که برای ریسایکلر ویو تعریف شده و به کمک اون میشه ریسایکلر ویو رو آپدیت کرد. تا قبل از این برای آپدیت ریسایکلر ویو از notifydatasetchanged استفاده می کردیم که هزینه زیادی داره، چون به ازای هر آیتم متدهای onCreateViewHolder و onBindViewHolder فراخونی می شوند. اما DiffUtil پرفورمنس بهتره داشته و انیمیشن قشنگی به آیتم ها می دهد.
یک کلاس جدید ایجاد کرده و آن را از DiffUtil.Callback اکستند می کنیم. کلاس DiffUtil.Callback، کلاسی ابسترکت بوده که چهار متد ابسترکت دارد که می بایست پیاده سازی شود. اوور راید کردن متد getChangePayload اختیاری است که در ادامه توضیح داده می شود.
در برنامه نویسی واکنشی (reactive programming) به جای داده (data) جریانی از داده (data flows) را داریم. به جریان داده stream هم گفته می شود.
به استریم قبل از اعمال اپراتور upStream و به استریم بعد از اعمال اپراتور downStream گفته می شود. شکل زیر:
کتابخانه RxBinding یک کتابخونه برای تبدیل ویوهای اندروید به Observable هست.
مثال هایی از نحوه استفاده این کتابخانه:
RxJava دارای سه عنصر اصلی است:
1. Observable: مسئول منتشر کردن آیتم ها
2. Subscriber: مصرف کننده آیتم های منتشر شده توسط Observable
3. Schedulers: در واقع همون thread pool هست که برای انجام تسک ها ازش استفاده میشه
فلوی اجرای کدهای RxJava به این صورت هست:
اول Observable ساخته میشه، سپس Subscriber (یا همون observable) بهش متصل میشه، پس از آن با توجه به تردی که در subscribeOn مشخص شده، عملیات اپراتورها در آن ترد انجام شده و در نهایت، با توجه به تردی که توسط observeOn معرفی می گردد، در ترد مذکور منتشر می شود.
بنابراین دیتای Observable هنگامی که observer به آن متصل می شود، ارزیابی می گردد. اما در اپراتورهای just و from به این صورت نیست و دیتای observable در لحظه ای که دیتا ساخته می شود، ارزیابی خواهد شد.
این اپراتور دیتای observable را با تاخیری که خودمون مشخص میکنیم منتشر میکنه.
کاربرد:
وقتی کاربر سرچ میکنه، خوب نیست که به ازای هر کاراکتری که مینویسه یه درخواستی به سرور بره. بهتره مثلا بعد از دو ثانیه برای عبارتی که نوشته، یک درخواست سرچ به سرور بره. اینجوری درخواست های بیهوده به سرور نمیره و کدنویسی بهینه تر هست.