Size: a a a

StartAndroid Ru Kotlin

2018 October 26

MK

Mikhail Kozlov in StartAndroid Ru Kotlin
Иван Захаров
чёрт, теперь понял, эти companion поля вначале инициализируются из настроек, а потом сеттером меняются не настройки а эти поля 8(
как бы это теперь починить...
Думаю так все-таки надежнее, а красоту можно наводить экстеншенами, а не вложенными классами.

https://pastebin.com/LTusSHNS
источник

MK

Mikhail Kozlov in StartAndroid Ru Kotlin
Иван Захаров
чёрт, теперь понял, эти companion поля вначале инициализируются из настроек, а потом сеттером меняются не настройки а эти поля 8(
как бы это теперь починить...
просто если это чинить, то нужно прописывать геттеры и сеттеры у полей в компаньен объекте... атогда получится то, от чего была попытка избавиться
источник

ИЗ

Иван Захаров... in StartAndroid Ru Kotlin
Mikhail Kozlov
Думаю так все-таки надежнее, а красоту можно наводить экстеншенами, а не вложенными классами.

https://pastebin.com/LTusSHNS
да, так и делал. просто при заведении новых настроек нужно по несколько строчек постоянно дублировать.
думал можно как то элегантно в 1 строчку сделать, а не вышло
источник

ИЗ

Иван Захаров... in StartAndroid Ru Kotlin
Mikhail Kozlov
просто если это чинить, то нужно прописывать геттеры и сеттеры у полей в компаньен объекте... атогда получится то, от чего была попытка избавиться
я придумал как пофиксить, работает, и выглядит неплохо
https://pastebin.com/VPdJUpre
источник

ИЗ

Иван Захаров... in StartAndroid Ru Kotlin
разница в ссылке на ::value
и в вызове при обращении к настройкам .get и .set
источник

MK

Mikhail Kozlov in StartAndroid Ru Kotlin
Иван Захаров
я придумал как пофиксить, работает, и выглядит неплохо
https://pastebin.com/VPdJUpre
Да, это работает, но стоит понимать минусы такого подхода:
1. При каждой операции чтения/записи в настройки нужно будет проходить через проверку типа
2. Мы упрощаем создание новых полей в настройках (делаем один раз для каждого поля), но усложняем синтаксис использования этих настроек (много раз в коде читаем и записываем поле)
3. Приходится работать не с чистыми полями в которые можно записать или из них прочитать, а рефлекшеном, где торчат наружу всякие побочные методы
источник

MK

Mikhail Kozlov in StartAndroid Ru Kotlin
Иван Захаров
я придумал как пофиксить, работает, и выглядит неплохо
https://pastebin.com/VPdJUpre
Получается что каждое поле в настройках это PrefSaver, который всегда ищет нужный тип, хотя для каждого поля тип заране определен и не меняется
источник

ИЗ

Иван Захаров... in StartAndroid Ru Kotlin
Mikhail Kozlov
Да, это работает, но стоит понимать минусы такого подхода:
1. При каждой операции чтения/записи в настройки нужно будет проходить через проверку типа
2. Мы упрощаем создание новых полей в настройках (делаем один раз для каждого поля), но усложняем синтаксис использования этих настроек (много раз в коде читаем и записываем поле)
3. Приходится работать не с чистыми полями в которые можно записать или из них прочитать, а рефлекшеном, где торчат наружу всякие побочные методы
1. Свитч на тип это 0-1 миллисекунды
2. Не понял проблемы, чтение и запись делаются столько же раз как и обычно
3. Да, это реф на метод, но что поделать... И если специально не ломать то не должно быть проблем
источник

MK

Mikhail Kozlov in StartAndroid Ru Kotlin
Иван Захаров
1. Свитч на тип это 0-1 миллисекунды
2. Не понял проблемы, чтение и запись делаются столько же раз как и обычно
3. Да, это реф на метод, но что поделать... И если специально не ломать то не должно быть проблем
1. Ну просто лишние действия и не самая быстрая операция, для преференсов не критично, конечно..
2. Имею в видо то, что читать настройки может поторебоваться много раз в коде, и полчается с точки зрения крастоты кода мы жертвуем многими местами (везде, где дрегаем настройки), ради одного (там где описываем поля в Prefs)

Но это так, придирки уже, хотя если бы я ревьюил код, то меня это место бы очень смутило :)
источник

ES

Erik Shakirov in StartAndroid Ru Kotlin
Можете подсказать что не так?
источник

ES

Erik Shakirov in StartAndroid Ru Kotlin
class WeatherFragment: Fragment(){

lateinit var weatherFont: Typeface

lateinit var tvCity: TextView
lateinit var tvUpdate: TextView
lateinit var tvCurrTemp: TextView
lateinit var tvWeathIcon: TextView
lateinit var tvDetails: TextView
var handler:Handler
constructor(){
handler=Handler()
}

}
источник

AS

Alexander Seleznev in StartAndroid Ru Kotlin
В блоке инит это сделай
источник
2018 October 27

ES

Erik Shakirov in StartAndroid Ru Kotlin
источник

ES

Erik Shakirov in StartAndroid Ru Kotlin
Все также (
источник

ES

Erik Shakirov in StartAndroid Ru Kotlin
class WeatherFragment: Fragment() {

lateinit var weatherFont: Typeface

lateinit var tvCity: TextView
lateinit var tvUpdate: TextView
lateinit var tvCurrTemp: TextView
lateinit var tvWeathIcon: TextView
lateinit var tvDetails: TextView
var handler: Handler

init {

handler = Handler()
}

}
источник

LR

Leonid Ratanov in StartAndroid Ru Kotlin
Ну явно же написано. Нельзя создать инстанс абстрактного класса
источник

LR

Leonid Ratanov in StartAndroid Ru Kotlin
Erik Shakirov
Можете подсказать что не так?
Импорт неправильный
источник

LR

Leonid Ratanov in StartAndroid Ru Kotlin
import android.os.Handler
источник

ES

Erik Shakirov in StartAndroid Ru Kotlin
Спасибо. Что то я невнимательный
источник

LR

Leonid Ratanov in StartAndroid Ru Kotlin
👍
источник