LifecycleOwner в настоящее время необходим мне для создания наблюдателя.
У меня есть код, который создает наблюдателя в ViewModel, поэтому я присоединяю LifecycleOwner при получении ViewModel в моем фрагменте.
Согласно документации Google.
Внимание: ViewModel никогда не должна ссылаться на представление, жизненный цикл или любой класс, который может содержать ссылку на контекст активности.
Нарушил ли я это предупреждение, и если да, то каким образом вы порекомендуете мне переместить мое создание наблюдатель для возврата данных?
Я создал только наблюдателя, поэтому мне интересно, действует ли он еще. Так как в документации Google также сказано.
Объекты ViewModel могут содержать LifecycleObservers, например объекты LiveData.
MainFragment
private lateinit var model: MainViewModel
/**
* Observer for our ViewModel IpAddress LiveData value.
* @see Observer.onChanged
* */
private val ipObserver = Observer {
textIp.text = it
hideProgressBar()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = ViewModelProviders.of(this).get(MainViewModel::class.java)
model.attach(this)
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? =
inflater?.inflate(R.layout.fragment_main, container, false)
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
buttonRetrieveIp.setOnClickListener {
showProgressBar()
model.fetchMyIp().observe(this, ipObserver) //Here we attach our ipObserver
}
}
override fun showProgressBar() {
textIp.visibility = View.GONE
progressBar.visibility = View.VISIBLE
}
override fun hideProgressBar() {
progressBar.visibility = View.GONE
textIp.visibility = View.VISIBLE
}
MainViewModel
private var ipAddress = MutableLiveData()
private lateinit var owner: LifecycleOwner
fun attach(fragment: MainFragment) {
owner = fragment
}
/**
* For more information regarding Fuel Request using Fuel Routing and Live Data Response.
* @see Fuel Routing Support
* @see Fuel LiveData Support
* */
fun fetchMyIp(): LiveData {
Fuel.request(IpAddressApi.MyIp())
.liveDataResponse()
.observe(owner, Observer {
if (it?.first?.statusCode == 200) {//If you want you can add a status code checker here.
it.second.success {
ipAddress.value = Ip.toIp(String(it))?.ip
}
}
})
return ipAddress
}
Обновление 1: улучшенная модель представления благодаря предложению @pskink по использованию преобразований.
private lateinit var ipAddress:LiveData
/**
* Improved ViewModel since January 23, 2018 credits to pskink [url=
*
* For more information regarding Fuel Request using Fuel Routing and Live Data Response.
* @see
Подробнее здесь: https://stackoverflow.com/questions/483 ... -viewmodel
Должен ли я включить LifecycleOwner в ViewModel? ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1715293536
Anonymous
LifecycleOwner в настоящее время необходим мне для создания наблюдателя.
У меня есть код, который создает наблюдателя в ViewModel, поэтому я присоединяю LifecycleOwner при получении ViewModel в моем фрагменте.
Согласно документации Google.
Внимание: ViewModel никогда не должна ссылаться на представление, жизненный цикл или любой класс, который может содержать ссылку на контекст активности.
Нарушил ли я это предупреждение, и если да, то каким образом вы порекомендуете мне переместить мое создание наблюдатель для возврата данных?
Я создал только наблюдателя, поэтому мне интересно, действует ли он еще. Так как в документации Google также сказано.
Объекты ViewModel могут содержать LifecycleObservers, например объекты LiveData.
[b]MainFragment[/b]
private lateinit var model: MainViewModel
/**
* Observer for our ViewModel IpAddress LiveData value.
* @see Observer.onChanged
* */
private val ipObserver = Observer {
textIp.text = it
hideProgressBar()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = ViewModelProviders.of(this).get(MainViewModel::class.java)
model.attach(this)
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? =
inflater?.inflate(R.layout.fragment_main, container, false)
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
buttonRetrieveIp.setOnClickListener {
showProgressBar()
model.fetchMyIp().observe(this, ipObserver) //Here we attach our ipObserver
}
}
override fun showProgressBar() {
textIp.visibility = View.GONE
progressBar.visibility = View.VISIBLE
}
override fun hideProgressBar() {
progressBar.visibility = View.GONE
textIp.visibility = View.VISIBLE
}
[b]MainViewModel[/b]
private var ipAddress = MutableLiveData()
private lateinit var owner: LifecycleOwner
fun attach(fragment: MainFragment) {
owner = fragment
}
/**
* For more information regarding Fuel Request using Fuel Routing and Live Data Response.
* @see [url=https://github.com/kittinunf/Fuel#routing-support]Fuel Routing Support[/url]
* @see [url=https://github.com/kittinunf/Fuel#livedata-support]Fuel LiveData Support[/url]
* */
fun fetchMyIp(): LiveData {
Fuel.request(IpAddressApi.MyIp())
.liveDataResponse()
.observe(owner, Observer {
if (it?.first?.statusCode == 200) {//If you want you can add a status code checker here.
it.second.success {
ipAddress.value = Ip.toIp(String(it))?.ip
}
}
})
return ipAddress
}
[b]Обновление 1: улучшенная модель представления благодаря предложению @pskink по использованию преобразований.[/b]
private lateinit var ipAddress:LiveData
/**
* Improved ViewModel since January 23, 2018 credits to [url=https://stackoverflow.com/users/2252830/pskink]pskink[/url] [url=
*
* For more information regarding Fuel Request using Fuel Routing and Live Data Response.
* @see
Подробнее здесь: [url]https://stackoverflow.com/questions/48396092/should-i-include-lifecycleowner-in-viewmodel[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия