Android Navigation

راهنمایی پیاده سازی navigation.

ادامه نوشته

Implementation by Delegation

اگه بخواییم یک اینترفیس رو پیاده سازی کنیم ولی تمام متدهای اون رو پیاده سازی نکنیم (یک کلاس دیگه داریم که همون اینترفیس رو پیاده سازی کرده و ما فقط می‌خوایم یکسری تغییر توی اون ایجاد کنیم).

interface Base
class BaseImpl() : Base
class Derived(n: Base) : Base by n

Java Static-Final

final:

  • کلاس final قبل توسعه نیست.
  • متد final قابل بازنویسی نیست.
  • متغییر final قابل مقدار دهی نیست.
  • کلاس abstract را نمی‌توان final کرد.

static:

  • فقط کلاسی که درون یک کلاس دیگر است می‌تواند statis باشد.
  • کلاس static قابلیت نمونه سازی مستقل را دارد.
  • کلاس static قابلیت توسعه را دارد.
  • متد static بدون نیاز به نمونه سازی از کلاس در درسترس است.
  • متد static به صورت پیشفرض final است.
  • متد static بدون بازنویسی ولی با همان نام در کلاس فرزند قابل ساخت است.
  • متد static در نمونه ساخته شده از کلاس در دسترس نیست.
  • متد static قابل بازنویسی override نیست.
  • متغییر static بدون نیاز به نمونه سازی از کلاس در درسترس است.
  • متغییر static final خواص هر دو گروه را دارد.

  • در کلاس‌های تودرتو اگه کلاس داخلی static نباشد، برای نمونه سازی از آن لازم است یک نمونه از کلاس بیرونی ایجاد کنیم.

A a = new A();
A.B b = a.new B();

  • متد های هم نام با کلاس پدر در کلاس فرزند بدون باز نویسی قابل ساختن هستند. بجز متدهای final

Activiy Lifecycle

زمانی که یک اکتیویتی ساخته میشه متدهای onCreate و onStart و onResume به ترتیب فراخوانی می‌شوند تا زمانی که ما اکتیویتی را مشاهده می‌کنیم و زمانی که یک اکتیویتی می‌خواد به کار خودش خاتمه بده متدهای onPause و onStop و onDestroy به ترتیب فراخوانی می‌شوند.

ادامه نوشته

const val VS val

const یک ثابت کامپایل تایم هست، یعنی مقدار آن در زمان کامپایل مشخص می‌شود بر خلاف val که میتوان داده آن را در زمان اجرا مشخص کرد.

این به این معنی است که مقدار const را نمیتوان برابر با یک متد یا یک کلاس قرار داد. مقدار آن باید primitive باشد مانند String.

همچنین const در جاوا public static final می‌شود در حالی که val در جاوا private static final می‌شود.

+ +

Custom View

وقتی یک کلاس View را توصعه میدهد شی canvas در متد onDraw در اختیارش قرار میگیرد.

برای محاسبه ابعاد view وقتی در حالت wrap_content قرار دارد باید متد onMeasuer را پیاده سازی کنیم برای فراخوانی این متد باید تابعد requestLayout را صدا بزنیم.

وقتی یک کلاس ViewGroup را توسعه میدهد باید onLayout را پیاده سازی کند.

در ViewGroup داستان این هستش که ما توی متد onLayout ابعاد layout خودمون رو داریم و فضایی که میخوای به هر کدوم از child ها اختصاص بدیم رو باید محاسبه کنیم و متد layout رو از child ها صدا بزنیم و ابعاد رو بدیم.

اگه child توی صفحه دیده بشه متد onDraw اون صدا زدم میشه و میشه هر کاری که میخوایم رو اونجا انجام بدیم.

دقت داشته باشید که موقعیت ها در اشیای فرزند نثب به خود آنها محاسبه میشود.