Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Activity, AppCompatActivity, FragmentActivity ΠΈ ActionBarActivity: ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ?

Π˜Ρ‚Π°ΠΊ, для уровня API 22 (с минимальной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ уровня API 15 ΠΈΠ»ΠΈ 16), Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ для размСщСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ для самих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²? Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ для всСго этого, ΠΈΠ»ΠΈ я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ?

8 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²

Π― Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Activity большС Π½Π΅ рСкомСндуСтся

Π˜Ρ‚Π°ΠΊ, для уровня API 22 (с минимальной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ уровня API 15 ΠΈΠ»ΠΈ 16), Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ для размСщСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ для самих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²? Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ для всСго этого, ΠΈΠ»ΠΈ я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ?

Π˜Ρ‚Π°ΠΊ, учитывая ваш minSdkVersion Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 15-16:

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ внСшний Π²ΠΈΠ΄ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ AppCompatActivity

Если Π½Π΅Ρ‚, Π½ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ FragmentActivity

Если Π½Π΅Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Activity

Нам Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ супСрклассов.

ВсС начинаСтся с Context, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся супСрклассом для всСх этих классов.

Context слСдуСт Π·Π° ContextWrapper ΠΈΠ»ΠΈ дополняСт Π΅Π³ΠΎ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ подошли ΠΊ Activity

НиТСстоящиС классы ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ, Π½ΠΎ ΠΎΠ½ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ ΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… API

ΠŸΡ€ΠΈ использовании этого класса вмСсто встроСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ² Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ getSupportFragmentManager() ΠΈ getSupportLoaderManager() соотвСтствСнно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ этим функциям.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ActionBar ΠΊ своСму Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ API 7 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅, Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ² этот класс для своСго дСйствия ΠΈ установив Ρ‚Π΅ΠΌΡƒ дСйствия Π½Π° Theme.AppCompat ΠΈΠ»ΠΈ похоТая Ρ‚Π΅ΠΌΠ°

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Π― ΡΡΡ‹Π»Π°ΡŽΡΡŒ Π½Π° эти Π΄Π²Π° ΠΎΠ΄ΠΈΠ½, Π΄Π²Π°

Π—Π΄Π΅ΡΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, особСнно Ссли Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ источники.

ActionBarActivity Π½Π° ΠΌΠ³Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π±Ρ‹Π» Π·Π°ΠΌΠ΅Π½ΠΎΠΉ класса Activity, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ упростил ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ActionBar Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

2019: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ AppCompatActivity

Π­Ρ‚ΠΎ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, учитывая:

Начиная с Android 3.0 (ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ API 11), всС дСйствия, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈΠΌΠ΅ΡŽΡ‚ ActionBar Π² качСствС ΠΏΠ°Π½Π΅Π»ΠΈ прилоТСния. Однако Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ постСпСнно добавлялись Π²ΠΎ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ панСль ActionBar Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… вСрсиях Android. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ собствСнный ActionBar Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ систСмы Android ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ устройство. Напротив, самыС послСдниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΈ ΠΎΠ½ΠΈ доступны Π½Π° любом устройствС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ.

По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс Toolbar ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²Π°ΡˆΠΈΡ… дСйствий. ИспользованиС ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π½Π° самом ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ устройств. НапримСр, Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов прСдоставляСт возмоТности ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° устройствах ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Android 2.1 (ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ API 7) ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ вСрсии, Π½ΠΎ встроСнная панСль дСйствий Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½, Ссли устройство Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Android 5.0 (ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ API 21) ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ вСрсии.

ΠžΠ±Ρ‰ΠΈΠ΅ инструкции ΠΏΠΎ добавлСнию ToolBar:

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π’ направлСниях Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Они довольно понятны ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹.

Activity FragmentActivity AppCompatActivity ActionBarActivity

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, использованиС AppCompatActivity всСгда являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ. Различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Activity

Activity ΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» прилоТСния

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» прилоТСния

ВсС прилоТСния Android ΠΈΠΌΠ΅ΡŽΡ‚ строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ систСмой ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ». ΠŸΡ€ΠΈ запускС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ прилоТСния систСма Π΄Π°Π΅Ρ‚ этому ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. КаТдоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ запускаСтся Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса, Ρ‡Ρ‚ΠΎ позволяСт систСмС Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ процСссам Π±ΠΎΠ»Π΅Π΅ высокой ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…. Благодаря этому, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ΄Π½ΠΈΠΌΠΈ прилоТСниями Android позволяСт Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ входящиС Π·Π²ΠΎΠ½ΠΊΠΈ. ПослС прСкращСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, систСма освобоТдаСт всС связанныС рСсурсы ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² разряд Π½ΠΈΠ·ΠΊΠΎΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ.

ПослС запуска activity ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ряд событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ систСмой ΠΈ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сущСствуСт ряд ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²:

Π‘Ρ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ взаимосвязь ΠΌΠ΅ΠΆΠ΄Ρƒ всСми этими ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

onCreate()

onStart

onResume

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° onResume activity ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС Resumed ΠΈ отобраТаСтся Π½Π° экранС устройства, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ с Π½Π΅ΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. И собствСнно activity остаСтся Π² этом состоянии, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ потСряСт фокус, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вслСдствии ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ activity ΠΈΠ»ΠΈ просто ΠΈΠ·-Π·Π° Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ экрана устройства.

onPause

onStop

Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ activity ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС Stopped. Π’ этом состоянии activity ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠ°. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ onStop слСдуСт ΠΎΡΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π΅ взаимодСйствуСт с activity. Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈ этом Π²ΠΎ врСмя состояния Stopped activity остаСтся Π² памяти устройства, сохраняСтся состояниС всСх элСмСнтов интСрфСйса. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ссли Π² тСкстовоС ΠΏΠΎΠ»Π΅ EditText Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ тСкст, Ρ‚ΠΎ послС возобновлСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ activity ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π΅Π΅ Π² состояниС Resumed ΠΌΡ‹ вновь ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π² тСкстовом ΠΏΠΎΠ»Π΅ Ρ€Π°Π½Π΅Π΅ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ тСкст.

onDestroy

Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ состояниями activity ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ схСмой:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ этими событиями ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Для этого возьмСм ΠΈΠ· ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π³Π»Π°Π²Ρ‹ класс MainActivity ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

И ΠΏΡ€ΠΈ запускС прилоТСния ΠΌΡ‹ смоТСм ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΎΠΊΠ½Π΅ Logcat ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая опрСдСляСтся Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° activity:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РусскиС Π‘Π»ΠΎΠ³ΠΈ

ПониманиС активности ΠΈ AppCompatActivity Π² Android

Π― Π½Π΅ знаю, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ Π»ΠΈ Π²Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании Eclipse для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Android, ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° MainActivity автоматичСски наслСдуСт Activity, Π° ΠΏΡ€ΠΈ использовании Android Studio для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Android ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎΠ½ автоматичСски наслСдуСт AppCompatActivity. ΠœΡ‹ использовали Eclipse ΠΈ AS для создания ΠΈ запуска ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ унаслСдованный Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс отличаСтся, Π½ΠΎ интСрфСйс Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ рисункС:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части интСрфСйса появится панСль дСйствий, Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ имя ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. НиТС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ AS ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ AppCompatActivity Π½Π° Activity Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ вСрхняя Ρ‡Π°ΡΡ‚ΡŒ ActionBar исчСзла.Код наслСдуСт Activity, Π½ΠΎ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° запускаСт, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ отличаСтся. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² AS AppCompatActivity наслСдуСтся автоматичСски.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Activity is the base class of all other activities, I don’t think it will be deprecated. The relationship among them is:

Activity FragmentActivity AppCompatActivity ActionBarActivity

‘ ActionBarActivity is deprecated, use AppCompatActivity instead.

So basically, using AppCompatActivity is always the right choise. The differences between them:

Π’ Android 5.0 ПанСль инструмСнтов Π·Π°ΠΌΠ΅Π½ΠΈΠ»Π° ActionBar, Π° ActionBarActivity Π±Ρ‹Π»Π° Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π½Π° AppCompatActivity, Ρ‚ΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ использования состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ввСсти настройки ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов Π² Activity.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ для всСх интСрфСйсов прилоТСния трСбуСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠ°Π½Π΅Π»ΠΈ прилоТСния. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ использованиС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ интСрфСйса ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

БоврСмСнная Android Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Kotlin. Π§Π°ΡΡ‚ΡŒ 1

Данная ΡΡ‚Π°Ρ‚ΡŒΡ являСтся ΠΏΠ΅Ρ€Π΅Π²ΠΎΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΡ‚ Mladen Rakonjac

ΠžΡ‡Π΅Π½ΡŒ слоТно Π½Π°ΠΉΡ‚ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π» Π±Ρ‹ всё Π½ΠΎΠ²ΠΎΠ΅ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠΎΠ΄ Android Π² Android Studio 3.0, поэтому я Ρ€Π΅ΡˆΠΈΠ» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Каким Π±ΡƒΠ΄Π΅Ρ‚ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅?

НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ самым простым, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС пСрСчислСнныС Π²Ρ‹ΡˆΠ΅ Π²Π΅Ρ‰ΠΈ: Ρƒ Π½Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° функция, которая ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ всС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ googlesamples ΠΈΠ· GitHub, сохраняСт эти Π΄Π°Π½Π½Ρ‹Π΅ Π² локальной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Π― ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС строк ΠΊΠΎΠ΄Π°. Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π½Π° GitHub.

Android Studio

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Android Studio 3, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° эту страницу

Android Studio 3 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Kotlin. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Create Android Project. Π’Π°ΠΌ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π»Π°ΠΆΠΎΠΊ с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Include Kotlin support. Он Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π”Π²Π°ΠΆΠ΄Ρ‹ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π”Π°Π»Π΅Π΅ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Empty Activity, Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Finish.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ сдСлали ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Android Π½Π° ΠšΠΎΡ‚Π»ΠΈΠ½Π΅ πŸ™‚

Kotlin

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ MainActivity.kt:

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .kt ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» являСтся Ρ„Π°ΠΉΠ»ΠΎΠΌ Kotlin.

MainActivity: AppCompatActivity() ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ AppCompatActivity.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово fun ΠΈ Π² ΠšΠΎΡ‚Π»ΠΈΠ½Π΅ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ;, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово override, Π° Π½Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ Π² Java.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ? Π² savedInstanceState: Bundle?? Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ savedInstanceState ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ° Bundle ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° null. Kotlin null бСзопасный язык. Если Ρƒ вас Π΅ΡΡ‚ΡŒ:

Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ a Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π° ΠΈ это Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ null. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции, Ссли Π²Ρ‹ это сдСлаСтС:

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ a nullable, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ эта ваТная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ языка ΠšΠΎΡ‚Π»ΠΈΠ½Π°? Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ NPE. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Android ΡƒΠΆΠ΅ устали ΠΎΡ‚ NPE. Π”Π°ΠΆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ null, сэр Π’ΠΎΠ½ΠΈ Π₯ΠΎΠ°Ρ€, извинился Π·Π° ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ nullable nameTextView. Если пСрСмСнная Ρ€Π°Π²Π½Π° null, Ρ‚ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ NPE:

Но ΠšΠΎΡ‚Π»ΠΈΠ½, Π½Π° самом Π΄Π΅Π»Π΅, Ρ…ΠΎΡ€ΠΎΡˆ, ΠΎΠ½ Π½Π΅ позволят Π½Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅. Он заставляСт нас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ? ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ !!. Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ?:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ исполнСна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли nameTextView Π½Π΅ null. Π’ ΠΈΠ½ΠΎΠΌ случаС, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ !!:

ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ NPE Ссли nameTextView null. Π­Ρ‚ΠΎ для Π°Π²Π°Π½Ρ‚ΡŽΡ€ΠΈΡΡ‚ΠΎΠ² :).
Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ нСбольшоС Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Kotlin. Когда ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ, я ΠΎΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ спСцифичСский ΠΊΠΎΠ΄ Π½Π° ΠšΠΎΡ‚Π»ΠΈΠ½Π΅.

2. Build Variants

Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ часто Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ окруТСния. НаиболСС стандартным являСтся тСстовоС ΠΈ производствСнноС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΈ срСды ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² URL-адрСсах сСрвСра, ΠΈΠΊΠΎΠ½ΠΊΠ΅, ΠΈΠΌΠ΅Π½ΠΈ, Ρ†Π΅Π»Π΅Π²ΠΎΠΌ API ΠΈ Ρ‚.Π΄. На fleka Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Ρƒ вас Π΅ΡΡ‚ΡŒ:

Π’ этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всСх ΠΈΡ…. Π£ Π½ΠΈΡ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ applicationId ΠΈ ΠΈΠΌΠ΅Π½Π°. Π’ gradle 3.0.0 Π΅ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ API flavorDimension, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ разновидности ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ разновидности demo ΠΈ minApi23. Π’ нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Β«defaultΒ» flavorDimension. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² build.gradle для прилоТСния ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ этот ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ android <>

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² strings.xml ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ строку app_name, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ нас Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Sync Now. Если Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚Π΅ Π² Build Variants, располоТСнным слСва ΠΎΡ‚ экрана, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ 4 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° сборки, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° сборки: Debug ΠΈ Release. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ сборки demoProduction ΠΈ запуститС Π΅Π³ΠΎ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈ запуститС Π΅Π³ΠΎ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΄Π²Π° прилоТСния с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

3. ConstraintLayout

Если Π²Ρ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ activity_main.xml, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ этот layout β€” ConstrainLayout. Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ писали ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ iOS, Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎΠ± AutoLayout. ConstraintLayout Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π½Π΅Π³ΠΎ. Они Π΄Π°ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Cassowary.

Constraint ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ связи ΠΌΠ΅ΠΆΠ΄Ρƒ View. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ View Ρƒ вас Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ 4 Constraint, ΠΎΠ΄ΠΈΠ½ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стороны. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС наш View ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стороны.

Если Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½Π΅Ρ‚Π΅ TextView Β«Hello WorldΒ» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Π²Π΅Ρ€Ρ… Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Design, Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Text появится новая линия:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Π’ΠΊΠ»Π°Π΄ΠΊΠΈ Design ΠΈ Text ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Наши измСнСния Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Design Π²Π»ΠΈΡΡŽΡ‚ Π½Π° xml Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Text ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Vertical_bias описываСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ view Π΅Π³ΠΎ Constraint. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‡Ρ‚ΠΎΠ±Ρ‹ наш Activity ΠΏΠΎΠΊΠ°Π·Π°Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π’ Π½Ρ‘ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ имя рСпозитория, количСство Π·Π²Π΅Π·Π΄, Π²Π»Π°Π΄Π΅Π»Π΅Ρ†, ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ рСпозитория issues, ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ layout, xml Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠŸΡƒΡΡ‚ΡŒ tools:text вас Π½Π΅ смущаСт. Он просто ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ просмотр ΠΌΠ°ΠΊΠ΅Ρ‚Π° (layout’Π°).

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ наш ΠΌΠ°ΠΊΠ΅Ρ‚ плоский, Ρ€ΠΎΠ²Π½Ρ‹ΠΉ. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π΅Ρ‚. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΠΆΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этом Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ здСсь. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ConstraintLayout ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ экрана:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

ΠΈ ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ я ΠΌΠΎΠ³Ρƒ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΡ‡Π΅Π½ΡŒ быстро.
Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ нСбольшоС Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ConstraintLayout. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Google code lab здСсь, ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΎ ConstraintLayout Π½Π° GitHub.

4. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° привязки Π΄Π°Π½Π½Ρ‹Ρ… Data Binding

Когда я ΡƒΡΠ»Ρ‹ΡˆΠ°Π» ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ привязки Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Π·Π°Π΄Π°Π» сСбС: «ButterKnife Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ для мСня. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΏΠ»Π°Π³ΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΌΠ½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ View ΠΈΠ· xml. Π—Π°Ρ‡Π΅ΠΌ ΠΌΠ½Π΅ это ΠΌΠ΅Π½ΡΡ‚ΡŒ?». Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ я ΡƒΠ·Π½Π°Π» большС ΠΎ привязкС Π΄Π°Π½Π½Ρ‹Ρ…, Ρƒ мСня Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ чувство, ΠΊΠ°ΠΊΠΎΠ΅ Ρƒ мСня Π±Ρ‹Π»ΠΎ, ΠΊΠΎΠ³Π΄Π° я Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ использовал ButterKnife.

Как ButterKnife ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ?

ButterKnife ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ скучного findViewById. Π˜Ρ‚Π°ΠΊ, Ссли Ρƒ вас 5 View, Π±Π΅Π· Butterknife Ρƒ вас Π΅ΡΡ‚ΡŒ 5 + 5 строк, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ваши View. Π‘ ButterKnife Ρƒ вас Π΅ΡΡ‚ΡŒ 5 строк. Π’ΠΎΡ‚ ΠΈ всё.

Π§Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ Π² ButterKnife?

ButterKnife ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠΎΠ΄Π°. Когда я использовал ButterKnife, я часто ΠΏΠΎΠ»ΡƒΡ‡Π°Π» ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя выполнСния, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я удалял View Π² xml, ΠΈ Π½Π΅ удалял ΠΊΠΎΠ΄ привязки Π² классС Activity / Fragment. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ View Π² xml, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ снова ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ привязку. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ скучно. Π’Ρ‹ тСряСтС врСмя Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ связСй.

Π§Ρ‚ΠΎ насчёт Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ привязки Π΄Π°Π½Π½Ρ‹Ρ…?

Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств! Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ привязки Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ свои View всСго ΠΎΠ΄Π½ΠΎΠΉ строкой ΠΊΠΎΠ΄Π°! ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Data Binding Π² наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ вСрсия компилятора Data Binding Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с вСрсиСй gradle Π² Ρ„Π°ΠΉΠ»Π΅ build.gradle ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

НаТмитС Sync Now. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² activity_main.xml ΠΈ ΠΎΠ±Π΅Ρ€Π½ΠΈΡ‚Π΅ ConstraintLayout Ρ‚Π΅Π³ΠΎΠΌ layout:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ всС xmlns Π² Ρ‚Π΅Π³ layout. Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΈΠΊΠΎΠ½ΠΊΡƒ Build ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ сочСтаниС клавиш Ctrl + F9 (Cmd + F9 Π½Π° Mac). Нам Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Data Binding ΠΌΠΎΠ³Π»Π° ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс ActivityMainBinding, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² нашСм классС MainActivity.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Если Π²Ρ‹ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ сборку ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π²Ρ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ класс ActivityMainBinding, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ гСнСрируСтся Π²ΠΎ врСмя компиляции. ΠœΡ‹ всС Π΅Ρ‰Π΅ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ связываниС, ΠΌΡ‹ просто сказали, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ нСнулСвая пСрСмСнная Ρ‚ΠΈΠΏΠ° ActivityMainBinding. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, я Π½Π΅ ΡƒΠΊΠ°Π·Π°Π» ? Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ‚ΠΈΠΏΠ° ActivityMainBinding, ΠΈ я Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» Π΅Π³ΠΎ. Как это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ? ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ lateinit позволяСт Π½Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Подобно ButterKnife, инициализация привязки Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ onCreate, ΠΊΠΎΠ³Π΄Π° ваш Activity Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ привязку Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ onCreate, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹, вСроятно, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Π²Π½Π΅ области видимости ΠΌΠ΅Ρ‚ΠΎΠ΄Π° onCreate. Наша привязка Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ, поэтому ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ lateinit. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ lateinit, Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ привязку ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ обращаСмся ΠΊ Π½Π΅ΠΉ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ binding. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ:

Π’ΠΎΡ‚ ΠΈ всё! Π’Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ привязали свои View. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ доступ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ измСнСния. НапримСр, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ имя рСпозитория Π½Π° Β«Modern Android Habrahabr ArticleΒ»:

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊΠΎ всСм View (Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ id, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ) ΠΈΠ· activity_main.xml Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ binding. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Data Binding Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ ButterKnife.

Getter’Ρ‹ ΠΈ Setter’Ρ‹ Π² ΠšΠΎΡ‚Π»ΠΈΠ½Π΅

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π½Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .setText (), ΠΊΠ°ΠΊ Π² Java. Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ здСсь, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Kotlin ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Java.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ сСттСры ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ элСмСнты класса ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² класса ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ наш класс. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ класс Square Π² Java:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ setA (), ΠΌΡ‹ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ класса ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сторонС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°, ΠΎΠ½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ a ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ, поэтому Π΅Π³ΠΎ нСльзя ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ нашСго класса Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ a Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, поэтому ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ getter. Π­Ρ‚ΠΎΡ‚ getter Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ a. Если Ρƒ вас Π΅ΡΡ‚ΡŒ 10 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌΠΈ трСбованиями, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ 10 Π³Π΅Ρ‚Ρ‚Π΅Ρ€ΠΎΠ². НаписаниС Ρ‚Π°ΠΊΠΈΡ… строк β€” это скучная Π²Π΅Ρ‰ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ наш Ρ€Π°Π·ΡƒΠΌ.

Kotlin ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Тизнь нашСго Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Если Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅

это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ доступ ΠΊ a нСпосрСдствСнно. Π­Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ

Π² Java. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Kotlin автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’ ΠšΠΎΡ‚Π»ΠΈΠ½Π΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСттСр ΠΈΠ»ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ Ρƒ вас Π΅ΡΡ‚ΡŒ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Kotlin Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ для вас:

field? Π§Ρ‚ΠΎ это? Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ясно, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° этот ΠΊΠΎΠ΄:

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ set Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° set, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ прямого доступа ΠΊ свойству Π² ΠΌΠΈΡ€Π΅ Kotlin. Π­Ρ‚ΠΎ создаст Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ. Когда Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ a = Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, ΠΎΠ½ автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ set.
НадСюсь, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ понятно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово field ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ сСттСры ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹.

ВСрнСмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ языка Kotlin, apply:

apply позволяСт Π²Π°ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС.

Π’ Kotlin ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ конструктор являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° класса. Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ конструктор, это всё! Π’Π°ΡˆΠ° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ созданию класса Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° здСсь. НСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² конструктора для Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ, Π½Π΅Ρ‚ Π³Π΅Ρ‚Ρ‚Π΅Ρ€ΠΎΠ² ΠΈ сСттСров. Π¦Π΅Π»Ρ‹ΠΉ класс Π² ΠΎΠ΄Π½ΠΎΠΉ строкС!

Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ Π² класс MainActivity.kt ΠΈ создайтС экзСмпляр класса Repository:

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, для построСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ activity_main.xml ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚Π΅Π³ data:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ repository, которая являСтся Ρ‚ΠΈΠΏΠΎΠΌ Repository Π² нашСм ΠΌΠ°ΠΊΠ΅Ρ‚Π΅. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² TextView с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ repository_name:

Π’ TextView repository_name Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ тСкст, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ· свойства repositoryName ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ repository. ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ рСпозитория ΠΎΡ‚ xml Π΄ΠΎ repository ΠΈΠ· MainActivity.kt.
НаТмитС Build, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ привязки Π΄Π°Π½Π½Ρ‹Ρ… для создания Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… классов, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ Π² MainActivity ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π΅ строки:

Если Π²Ρ‹ запуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² TextView появится Β«Habrahabr Android Repository ArticleΒ». Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ функция, Π΄Π°? πŸ™‚

Но Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚, Ссли ΠΌΡ‹ сдСлаСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡΡ Π»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ тСкст Ρ‡Π΅Ρ€Π΅Π· 2 сСкунды? НСт, Π½Π΅ отобразится. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π½ΠΎΠ²ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ repository. Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ:

Но это скучно, Ссли Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ мСняСм ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ свойство. БущСствуСт Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Property Observer.
Π”Π°Π²Π°ΠΉΡ‚Π΅ сначала опишСм, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Observer, Π½Π°ΠΌ понадобится это Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ rxJava:

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΡƒΠΆΠ΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎΠ± androidweekly.net. Π­Ρ‚ΠΎ Π΅ΠΆΠ΅Π½Π΅Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π±ΡŽΠ»Π»Π΅Ρ‚Π΅Π½ΡŒ ΠΎΠ± Android Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅Π³ΠΎ, ΡƒΠΊΠ°Π·Π°Π² свой адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹. ПозТС, Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ подписки Π½Π° своСм сайтС.

Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° Observer / Observable. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, Android Weekly β€” Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹ΠΉ (Observable), ΠΎΠ½ выпускаСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π±ΡŽΠ»Π»Π΅Ρ‚Π΅Π½ΠΈ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ нСдСлю. Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ β€” это Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΠΈ (Observers), ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° Π½Π΅Π³ΠΎ, ΠΆΠ΄ΡƒΡ‚ Π½ΠΎΠ²Ρ‹Ρ… выпусков, ΠΈ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π΅Ρ‘, ΠΎΠ½ΠΈ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ Π΅Ρ‘, ΠΈ Ссли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… Ρ€Π΅ΡˆΠ°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠΌ это Π½Π΅ нравится, ΠΎΠ½ / ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ.

Property Observer, Π² нашСм случаС, прСдставляСт собой XML-ΠΌΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚ΡŒ измСнСния Π² экзСмплярС Repository. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Repository являСтся Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹ΠΌ. НапримСр, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свойство name класса Repository измСняСтся Π² экзСмплярС класса, xml Π΄ΠΎΠ»ΠΆΠ΅Π½ обновится Π±Π΅Π· Π²Ρ‹Π·ΠΎΠ²Π°:

Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ привязки Π΄Π°Π½Π½Ρ‹Ρ…? Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° привязки Π΄Π°Π½Π½Ρ‹Ρ… прСдоставляСт Π½Π°ΠΌ класс BaseObservable, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² классС Repository:

BR β€” это класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ автоматичСски гСнСрируСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ аннотация Bindable. Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ установлСно, ΠΌΡ‹ ΡƒΠ·Π½Π°Ρ‘ΠΌ ΠΎΠ± этом. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ имя рСпозитория Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· 2 сСкунды Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ executePendingBindings ().

Для этой части это всё. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части я Π½Π°ΠΏΠΈΡˆΡƒ ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π΅ MVVM, ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π΅ Repository ΠΈ ΠΎΠ± Android Wrapper Managers. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ вСсь ΠΊΠΎΠ΄ здСсь. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π΄ΠΎ этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ просмотрС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° выглядит Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΡˆΡ€ΠΈΡ„Ρ‚ Russo One ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π±Ρ‹Π» Π·Π°Π΄Π°Π½ элСмСнту TextView (ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΡˆΡ€ΠΈΡ„Ρ‚Π°: res\fonts\russo_one.ttf ). Но Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅ всё выглядит ΠΈΠ½Π°Ρ‡Π΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π”ΠΎ использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ AppCompat ΠΌΠΎΡ‘ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ вСсило β‰ˆ345 Кб. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ я Π΄ΠΎΠ±Π°Π²ΠΈΠ» эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ стало Π²Π΅ΡΠΈΡ‚ΡŒ 2,6 Мб β€” это ΠΏΠΎΡ‡Ρ‚ΠΈ Π² 8 Ρ€Π°Π· большС. ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π»ΠΈ эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ соврСмСнныС ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ программисты Π² своих Android-прилоТСниях. Π’ Ρ‡Ρ‘ΠΌ ΠΆΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΡΡƒΡ‚ΡŒ использования этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ? Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ Π½Π°ΡˆΡ‘Π» Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π½Π΅ΠΉ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ лишь ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ красивый ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях Android. Π£ ΠΌΠΎΠ΅Π³ΠΎ прилоТСния я Ρ…ΠΎΡ‡Ρƒ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ API 15. Π‘Ρ‚ΠΎΠΈΡ‚ Π»ΠΈ ΠΌΠ½Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΈ Ссли стоит, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠΌΠΈ Π΅Ρ‘ прСимущСствами Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ? ΠžΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ русскоязычных справочников, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΉ, Ρ„ΠΎΡ€ΡƒΠΌΠΎΠ² Π½Π° эту Ρ‚Π΅ΠΌΡƒ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ я сумСл Π½Π°ΠΉΡ‚ΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ appcompatactivity Π² ΠΊΠΎΡ‚Π»ΠΈΠ½Π΅

2 ΠΎΡ‚Π²Π΅Ρ‚Π° 2

Beginning with Android 3.0 (API level 11), all activities that use the default theme have an ActionBar as an app bar. However, app bar features have gradually been added to the native ActionBar over various Android releases. As a result, the native ActionBar behaves differently depending on what version of the Android system a device may be using. By contrast, the most recent features are added to the support library’s version of Toolbar, and they are available on any device that can use the support library.

For this reason, you should use the support library’s Toolbar class to implement your activities’ app bars. Using the support library’s toolbar helps ensure that your app will have consistent behavior across the widest range of devices. For example, the Toolbar widget provides a material design experience on devices running Android 2.1 (API level 7) or later, but the native action bar doesn’t support material design unless the device is running Android 5.0 (API level 21) or later.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *