
Руслан
19.03.2017
19:42:06
Так а джус получается ты сам накрутил

Alexey
19.03.2017
19:42:26

Руслан
19.03.2017
19:42:41
Так там вроде нету джуса в зависимостях

Google

Alexey
19.03.2017
19:43:22
Use Guice for dependency injection.

Igor
19.03.2017
19:43:37

Руслан
19.03.2017
19:43:46
А, оно в мете, вижу

Alexey
19.03.2017
19:44:10

Руслан
19.03.2017
19:46:31
Насколько я вижу, если этот код не выполнится, сессия незабиндится https://github.com/rubenlagus/TelegramBots/blob/0c03ab093f8841658141f7cdec48a1bd9c0bf524/telegrambots/src/main/java/org/telegram/telegrambots/ApiContextInitializer.java#L19
Судя повсему ты сам должен этот метод дернуть

Alexey
19.03.2017
19:47:28
секундочку
работает

Sasha
19.03.2017
21:49:34
Это кто нибудь уже пробовал? https://medium.com/@mateusz_bartos/write-ios-apps-in-java-along-with-android-900d6013f83f#.6rpd7lnb6

Igor
19.03.2017
21:58:49

Sasha
19.03.2017
22:02:21
MOE.

Google

Igor
19.03.2017
22:06:20
MOE.
Пробовал, еще когда он был проектом Intel - не понравилось.
- Миллион аннатация на кажый метод/класс
- Очень хреново работал с Kotlin (генераторы object-c прослойки не работали), в итоге много когда приходилось писать на Java ?
Потом Intel "отдал его в opensource" и он теперь где-то на грани смерти.
RoboVM - куда проще юзать и он тоже более-мене поддерживается.

Artem
19.03.2017
22:07:08
Как получить instance класса Application в андроид на котлине? Раньше у меня было так: приватная статическая переменная instance типа App, а в onCreate я делал instance = this. Потом методом instance() получал его. В котлине чет туплю(

Sasha
19.03.2017
22:07:20

Igor
19.03.2017
22:07:25

Artem
19.03.2017
22:07:51
а как из него обратиться к переменной внешнего класса? Пробовал через компаньон

Igor
19.03.2017
22:08:39

Artem
19.03.2017
22:10:41
хм, спасибо
а как может выглядеть решение без lateinit?
это спрашиваю просто ради интереса, ну и чтобы знать. Почитал, но не очень хорошо понял от чего спасает lateinit
оно как бы позволяет сразу не инициализировать её.. и мы указываем, что инициализация будет позже, когда нам нужно будет. Так?

Quantum Harmonizer
19.03.2017
22:44:27

Artem
19.03.2017
22:48:17
Кстати, а из-за чего может вылетать при использовании Kotlin Android Extensions. Хотел попробовать фичу с вьюхами, когда в импорт просто пишешь путь на layout, а потом по id обращаешься. сделал btn1.setOnClickListener{...} и при создании экрана — вылет
затупил. Через мою рут вью надо было обращаться

Quantum Harmonizer
20.03.2017
08:10:24

Roman
20.03.2017
09:29:36
Привет!
Только начал учить Котлин, делаю по уроку и проблема с импором лэйаута.
Делаю импорт:
import kotlinx.android.synthetic.main.news_item.view.*
Использую в коде
description.text = item.title
и получаю ошибку reciever type mismatch.
item.title - это String
в xml description выглядит так:
<TextView
android:id="@+id/description"
В другом классе проблем с импортом нет.
В чем может быть проблема?

Igor
20.03.2017
09:41:46

Roman
20.03.2017
09:45:16
То же самое.
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public val View.description: TextView! defined in kotlinx.android.synthetic.main.news_item.view

Quantum Harmonizer
20.03.2017
09:48:07

Roman
20.03.2017
09:49:36

Quantum Harmonizer
20.03.2017
09:50:57
То есть по факту синтетические свойства для вьюх не импортировались?

Google

Roman
20.03.2017
09:52:41
Не знаю. Но в тексте ошибки он же видит эту вьюху?
public val View.description: TextView! defined in kotlinx.android.synthetic.main.news_item.view

Quantum Harmonizer
20.03.2017
09:53:25
А плагин kotlin extensions включён?

Roman
20.03.2017
09:54:12
Да, потому что в другом классе
import kotlinx.android.synthetic.main.news_fragment.*
Мне спокойно дает работать с вьюхой

Dmitry
20.03.2017
10:04:02
А у тебя точно *тот* импорт?
kotlinx.android.synthetic.main.news_item_loading.view

Pavel Shackih
20.03.2017
10:06:16
а там разве не на itemView надо вызывать экстенжены?
itemView.time.text = ...

Quantum Harmonizer
20.03.2017
10:06:53

Roman
20.03.2017
10:15:18
Спасибо большое

Igor
20.03.2017
12:05:22
В Android проектах с kotlin 1.1.1 - теперь не нужно хранить *.kt файлы в /main/kotlin?
IDEA CE 2016.3.5 не маркирует каталог /main/kotlin как "source root"
И когда я маркирую через IDEA, то при повторном заходе в проект - он сбрасывается.

Dzmitry
20.03.2017
12:07:14
Ты и раньше мог хранить не там, просто рядом с java
ты
main.java.srcDirs += 'src/main/kotlin'
test.java.srcDirs += 'src/test/kotlin'
делал?

Igor
20.03.2017
12:08:17

Dzmitry
20.03.2017
12:08:45
хз
может сломали

Igor
20.03.2017
12:08:57
делал?
нет и не хочу это делать руками, когда есть плагин (kotlin-android).
Опять таки в JavaSE - все работает (плагин kotlin).

Dzmitry
20.03.2017
12:09:36
в плагине видно что-то опять отломалось
>Но раньше, /kotlin/main нормально определялся без всяких КОСТЫЛЕЙ в build.gradle
Плагин эту магию просто делал. причем у меня оно у меня и раньше работало через раз.


Artem
20.03.2017
13:08:55
В чём может быть трабл? Проблема: переписал свой базовый адаптер и viewHolder на котлин и в холдере перестал срабатывать абстрактный метод
abstract class BaseAdapter<T : BaseViewHolder> : RecyclerView.Adapter<T>() {
lateinit var c: Context
var clickListener: IRecyclerViewClickListener? = null
lateinit var rv: RecyclerView
private var lastPos : Int = -1
override fun onBindViewHolder(holder: T, position: Int) {
holder.flush()
super.bindViewHolder(holder, position)
animate(holder.itemView, position)
}
private fun animate(root: View, position: Int) {
if (position > lastPos) {
val a = AnimationUtils.loadAnimation(c, android.R.anim.fade_in)
root.startAnimation(a)
lastPos = position
}
}
override fun onViewDetachedFromWindow(holder: T) {
holder.itemView.clearAnimation()
}
override fun onAttachedToRecyclerView(recyclerView: RecyclerView?) {
super.onAttachedToRecyclerView(recyclerView)
this.c = recyclerView!!.context
this.rv = recyclerView
}
fun inflate(@LayoutRes layoutId: Int, parent: ViewGroup? = null) : View {
return LayoutInflater.from(c).inflate(layoutId, parent, false)
}
fun attachItemClickListener(listener: IRecyclerViewClickListener) {
this.clickListener = listener
}
}

Google

Artem
20.03.2017
13:10:29
мб чего не так делаю просто?

Igor
20.03.2017
13:22:29


Artem
20.03.2017
13:23:03
onCreateViewHolder как и положено. Код холдера кидать?
abstract class BaseViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {
private var item: View? = itemView
abstract fun flush()
fun<V : View> find(@IdRes id: Int) : V {
return item!!.findViewById(id) as V
}
}

Igor
20.03.2017
13:28:10

Андрей
20.03.2017
13:29:06
и можно не в чат - тут, наверное, лучше уточнять куда, на пастебин или в личку.

Admin
ERROR: S client not available

Igor
20.03.2017
13:34:06

Artem
20.03.2017
13:37:04
на будущее понял, спасибо)

Андрей
20.03.2017
13:53:01
на будущее понял, спасибо)
А у тебя во многих классах реализованы такие методы, как в 58-ой строчке http://pastebin.com/PCnV7fzv ?
Оно решается таким экстеншеном:
inline fun <reified T : View> View.find(@IdRes id: Int) = findViewById(id) as T
и юзается как-то так:
var title = root.find<TextView>(R.id.title)
а если тип переменной изветсен заранее, то даже без генерика:
title = root.find(R.id.title)

Artem
20.03.2017
13:54:34
Да это да, знаю. Спасибо. Я хотел сначала адаптер нормально переписать

Andrew
20.03.2017
15:23:55

Sergey
20.03.2017
15:25:36
я в kotlin все пихаю

Quantum Harmonizer
20.03.2017
15:26:00
я не переименовываю, не царское это дело)

Andrew
20.03.2017
15:28:55
я в kotlin все пихаю
ну прост это ж не настоящая папка, при попытке переименовать чёто матерится и в половине мест в итоге java остается в названии

Quantum Harmonizer
20.03.2017
15:29:10
настоящая

Sergey
20.03.2017
15:29:17
настоящая жи
только это не пакет

Andrew
20.03.2017
15:29:46
а все, туплю уже
блин, переименовал и эта папка вообще из представления android пропала

Google

Quantum Harmonizer
20.03.2017
15:40:07
надо её отметить как исходники

Igor
20.03.2017
15:42:37

Andrew
20.03.2017
15:48:04

Igor
20.03.2017
15:52:15
Переименуй папку через любой file-manager (или консоль)

Andrew
20.03.2017
15:52:36
ок, спасибо, попробую

Igor
20.03.2017
15:53:52
ок, спасибо, попробую
И кстати лучше сразу снимать эти галочки (мне они столько раз ломали разные файлы ресурсов ?)

Andrew
20.03.2017
15:56:34
да, мне тоже, тут хеллоуворлд, ресайклер понадрачивать с созданием айтемов без инфлейта
потому можно на галочки не смотреть особо

Roman
21.03.2017
07:32:42
продолжаю осваивать бестпрктис по работе с nullability
был такой код на джава:
if (userStateInteractor.isUserLoggedIn && locationInteractor != null) {
return locationInteractor.onAppStop()
} else {
return Completable.complete()
}
стал такой на котлине
val locationInteractor = this.locationInteractor
if (userStateInteractor.isUserLoggedIn && locationInteractor != null) {
return locationInteractor.onAppStop()
} else {
return Completable.complete()
}
как-то можно сделать лучше/короче/красивше?
private var locationInteractor: LocationInteractor? = null
так объявлено свойство

Igor
21.03.2017
07:36:24

Roman
21.03.2017
07:37:53
return вынести ?
хорошо =) вопрос немного не об этом ) это нормально что если есть nullable свойство то код работы с ним всегда получается более многословным чем на джаве?

Igor
21.03.2017
07:41:29

Roman
21.03.2017
07:44:15
а тут тоже ничего нельзя сделать лучше:
было:
locationInteractor = FsofApplication.userComponent.locationInteractor
return locationInteractor.requestDeviceLocation()
стало:
val locationInteractor = FsofApplication.userComponent.locationInteractor
this.locationInteractor = locationInteractor
return locationInteractor.requestDeviceLocation()
?

Михаил
21.03.2017
07:46:53
можно
котлин 1.1?