
Constantine
05.11.2016
11:12:27
Вдруг кому сгодится - нарисовал для себя сейчас картинку состояний при инициализации гео-функционала. Лично я без картинки это слабо себе могу запомнить.
https://gist.github.com/cvoronin/eeb61e7f486645f85af11ad62d73df41
OMG, а нафига превьюшка то такая...

Denis
05.11.2016
11:14:21

Google

Constantine
05.11.2016
11:14:42
ага, но так-то без разницы

Ⓜ️ᵃʳᵃᵗ
05.11.2016
11:15:25
Я вообще локешн сервис написал и таскаю его, общение идет мессейджами

Denis
05.11.2016
11:15:54

Constantine
05.11.2016
11:16:17
в прод ещё не выкатили, но, имхо, это лучшее, что могло случиться с java

Denis
05.11.2016
11:17:01
В студию тогда

Constantine
05.11.2016
11:17:23

Ⓜ️ᵃʳᵃᵗ
05.11.2016
11:18:24
Я обновил, в общем гибридный, либо гугл локейшн, либо обычный юзает, если первое не доступно, и включая пермишенсы

Constantine
05.11.2016
11:21:00

Дмитрий
05.11.2016
11:23:22
ребят, кто котлином пользуется
как сделать вот такое: var foo: Bar!!
это я по аналогии с Swift хочу
чтобы везде потом не писать foo!!

Google

Yan
05.11.2016
11:23:53
lateinit var foo: Bar

Дмитрий
05.11.2016
11:24:13
спасибо!

Constantine
05.11.2016
11:25:32
можно ещё так
var value by Delegates.notNull<String>()

Дмитрий
05.11.2016
11:57:04
в чём разница?
(что предпочтительнее?)

Constantine
05.11.2016
12:05:33
С практической точки зрения разницы нет, с lateinit оно читается проще
Но тут нужно быть готовым к тому, что нет явного способа проверить - а было ли значение инициализировано? Может понадобиться, например, в onStop чтобы что-то сказать презентеру - а он, как раз, и может быть неинициализированным по какой-то причине
местами с этой целью народ такое решение использует
inline fun wasInit(f: () -> Unit): Boolean {
try {
f()
} catch(e: UninitializedPropertyAccessException) {
return false
}
return true
}
override fun onPause() {
wasInit { presenter.onPause() }
super.onPause()
}

Дмитрий
05.11.2016
12:42:39
оу, выглядит как костыль
в swift можно проверить
var foo: Bar!
if (foo != nil) {
перенёс весь проект на котлин, и подумал: а нахрена?

Constantine
05.11.2016
12:50:02
ну там много других вкусностей.
в случае котлина проверка на null не канает - мы ведь сразу говорим: это значение никогда не может быть null-ём
это примерно как проверять объект типа Integer на тему, а не стал ли он внезапно String[] :)

Дмитрий
05.11.2016
12:52:15
если говорить в рамках c++, то всё может быть =)

Constantine
05.11.2016
12:53:02
ну ещё из забавностей с value!! можно поймать прикольные случаи, когда значение парсится, например, из JSON при помощи, например GSON. Хоть на уровне объявления переменной сказано - она никогда null не будет, но GSONу оно до лампочки - если null, значит держите null
на этапе десериализации ничего не сломается, но при обращении к значению - ога, можно словить NPE там, где его вроде бы не ждёшь

Дмитрий
05.11.2016
13:08:56
вот ещё вопрос, когда подключил kotlin отвалился butterknife (поля так и остаются null, причём в Java файлах)

Eugene
05.11.2016
13:09:42

Дмитрий
05.11.2016
13:15:27
а что лучше?
сейчас подключил extensions, но не очень понял как пользоваться: в on create view надо писать view.id, в других местах id (про фрагменты если говорить)
и ещё, я так понял в доках написано что он каждый раз будет findViewById вызывать, что как мне кажется не очень

Google

Дмитрий
05.11.2016
13:16:05
сделал по старинке, сам объявил переменные, в onCreateView ссылки в них положил
а вы как делаете?

Denis
05.11.2016
13:16:15
databinding
https://developer.android.com/topic/libraries/data-binding/index.html

Anton
05.11.2016
13:16:34
Батернайф

Denis
05.11.2016
13:16:51

Anton
05.11.2016
13:17:01
:(

Дмитрий
05.11.2016
13:17:36
батеркнайф не работает с котлин (на яве его использую)

Denis
05.11.2016
13:18:19

Timur
05.11.2016
13:20:59

Denis
05.11.2016
13:22:08
Это ололо конечно, две версии либы пилить.

Yan
05.11.2016
13:22:25

Constantine
05.11.2016
13:22:35
нужно просто согласиться :)
но тут, опять, нужно быть аккуратным в случаях, когда в один лэйаут инклюдятся разные лэйауты - если у них есть элементы с одинаковым id, лучше обращаться к ним явным образом (например, через anko)

Artem
05.11.2016
15:07:17

Владислав
05.11.2016
15:07:47

Aleksei
05.11.2016
15:42:23
Capt использовать надо

Artem
05.11.2016
15:53:30
что такое capt?

Aleksei
05.11.2016
15:58:22
compile 'com.jakewharton:butterknife:8.0.1'
kapt 'com.jakewharton:butterknife-compiler:8.0.1'

Google

Aleksei
05.11.2016
15:58:37
Kapt ошибся извините

Axrorxo'ja
05.11.2016
15:59:27
Apt добавили?
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
apply plugin: 'android-apt'
...
dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
}

Denis
05.11.2016
16:10:41
А можно использовать датабинд и не жрать BK

Aleksei
05.11.2016
16:14:21
Апт для Явы

Gerc
05.11.2016
16:22:14
А можно и не датабиндинг и не кнайфы, а плагином генератора

Admin
ERROR: S client not available

Denis
05.11.2016
16:25:19
Зачем?
Датабинд много в себе полезного несет, чтобы его просто так взять и плагином заменить.

Stas
05.11.2016
16:27:43
Кто-нибудь пользовался LinearSnapHelper ?

Gerc
05.11.2016
16:30:18

Denis
05.11.2016
16:30:45
Там даже предупреждают, вроде как, не писать в хмл сложные выражения.

Gerc
05.11.2016
16:33:40
Много глюков? Например?
В едиттексте написал что-то, потом сеттекст сделал и пошла рекурсия обсерверов с стаковерфлов

Denis
05.11.2016
16:34:17

Gerc
05.11.2016
16:34:31
Да, которого нет

Denis
05.11.2016
16:35:09
Хм, есть пример кода?

Igor
05.11.2016
16:35:26

Google

Denis
05.11.2016
16:37:24
Что например?
https://developer.android.com/topic/libraries/data-binding/index.html
Просвещайся

Igor
05.11.2016
16:38:20

Denis
05.11.2016
16:38:27
Ну да, конечно
Стопицот findViewById лучше
Мы у мамы сильные и смелые, все руками писать будем

Gerc
05.11.2016
16:47:10

Denis
05.11.2016
16:48:53
Не думаю, что этот плагин покроет все возможности датабинда

Gerc
05.11.2016
16:49:21

Denis
05.11.2016
16:49:31
И так сделает?
android:text="@{String.valueOf(index + 1)}"
android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}"
android:transitionName='@{"image_" + id}'
И лямбды засунет? и кастомные класы прокинет?
Прям магический плагин
Ещеб он приложуху за меня писал, цены бы ему не было

Gerc
05.11.2016
16:50:25
Это только датабиндинг ваш умеет
А плагин только две легкие вещи. Без глючного биндинга и кода в хмл

Konstantins
05.11.2016
16:51:01
Он типа как в винфоне?
В xaml

Denis
05.11.2016
16:51:15