国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

可做商業(yè)用途的圖片網(wǎng)站新開網(wǎng)店自己如何推廣

可做商業(yè)用途的圖片網(wǎng)站,新開網(wǎng)店自己如何推廣,最討厭網(wǎng)站,python做流量網(wǎng)站Android LiveData 介紹 系列文章目錄前言一、LiveData是什么?二、簡單使用依賴測試數(shù)據(jù)準備1.創(chuàng)建可觀察的livedata2.觀察它3.更新它 總結 系列文章目錄 Android LiveData 介紹(本文) 前言 本系列根據(jù)官網(wǎng)介紹Jetpack中的數(shù)據(jù)通信組件&…

Android LiveData 介紹

  • 系列文章目錄
  • 前言
  • 一、LiveData是什么?
  • 二、簡單使用
    • 依賴
    • 測試數(shù)據(jù)準備
    • 1.創(chuàng)建可觀察的livedata
    • 2.觀察它
    • 3.更新它
  • 總結


系列文章目錄

Android LiveData 介紹(本文)


前言

本系列根據(jù)官網(wǎng)介紹Jetpack中的數(shù)據(jù)通信組件,本文介紹LiveData。在介紹LiveData之前,我們需要知道安卓官方推薦我們在viewmodel中處理業(yè)務或者數(shù)據(jù)的一些運算和網(wǎng)絡請求,并通過觀察數(shù)據(jù)的變化,來通知activity或者fragment數(shù)據(jù)更新。

在這里插入圖片描述


一、LiveData是什么?

我們先用官方的話來解釋一下:

LiveData 是一種可觀察的數(shù)據(jù)存儲器類。與常規(guī)的可觀察類不同,LiveData 具有生命周期感知能力,意指它遵循其他應用組件(如 activity、fragment 或 service)的生命周期。這種感知能力可確保 LiveData 僅更新處于活躍生命周期狀態(tài)的應用組件觀察者。

那么根據(jù)官網(wǎng)的總結,我們翻譯成人話,就是Livedata是用于儲存我們需要數(shù)據(jù)的一個類,那么為什么不直接new一個對象要多加一個LiveData呢?因為LiveData可以讓使用到這個數(shù)據(jù)的組件的生命周期和這個數(shù)據(jù)同步, 以activity為例,當activity走到onDestroy時,數(shù)據(jù)也同樣會被銷毀,因此也避免了activity銷毀了,activity持有的對象還活著而導致內(nèi)存泄漏。 簡單來說,Livedata就是為了解決這個問題而誕生的,它讓開發(fā)者可以將更多的精力投入到具體的邏輯和功能中,而不是陷落在各個組件的生命周期的管理中。

二、簡單使用

前面說到,LiveData 是一種可觀察的數(shù)據(jù)存儲器類,因此Livedata的使用可以簡單的分為三步,及創(chuàng)建可觀察的livedata,觀察它,更新它

我們先看效果,然后實戰(zhàn)

通過livedata更新數(shù)據(jù)
在這里插入圖片描述
點擊后
在這里插入圖片描述

依賴

import androidx.lifecycle.LiveData

LiveData屬于lifecycle,因此無需引入額外依賴,最新版的andorid studio 建項目就自帶

測試數(shù)據(jù)準備

因為,國慶節(jié)寫的這篇文章,所以本例就寫一個過國慶的例子。

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/tv_national_day"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/bt_national_day"android:text="玩一天"android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_constraintTop_toBottomOf="@+id/tv_national_day"/></androidx.constraintlayout.widget.ConstraintLayout>

MainActivity:


class MainActivity : AppCompatActivity() {private lateinit var textView : TextViewoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)initView()}private fun initView() {textView = findViewById(R.id.tv_national_day)val button = findViewById<Button>(R.id.bt_national_day)button.setOnClickListener {//todo 數(shù)據(jù)請求}}}

1.創(chuàng)建可觀察的livedata

新建MainViewModel類

import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MutableLiveData/*** @author zengyifeng* @date createDate:2023-09-30* @brief description ViewModel*/
class MainViewModel(application: Application) : AndroidViewModel(application) {var nationalDayLiveData : MutableLiveData<Int> = MutableLiveData(8)}

國慶節(jié)嘛,咱們要有點國慶味道,上例代碼通過創(chuàng)建MutableLiveData 創(chuàng)建了一個名為nationalDayLiveData 的可觀察對象。MutableLiveData 是基于LiveData的封裝,暴露了setValue和postValue方法

在MainActivity中添加關于viewmodel的初始化,這時MainActivity代碼如下:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextViewclass MainActivity : AppCompatActivity() {private lateinit var viewModel : MainViewModel
private lateinit var textView : TextViewoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)initView()initViewModel()}private fun initView() {textView = findViewById(R.id.tv_national_day)val button = findViewById<Button>(R.id.bt_national_day)button.setOnClickListener {//todo 數(shù)據(jù)請求}}private fun initViewModel() {viewModel = MainViewModel(application)}}

2.觀察它

在本例中,數(shù)據(jù)會在activity中更新,所以觀察livedata對象也將進行在activity中,因此我們在MainActivity中新增觀察livedata的代碼initObserve()

代碼如下(示例):

    private fun initObserve() {viewModel.nationalDayLiveData.observe(this) {textView.text = "國慶節(jié)還有$it 天"}}

3.更新它

因為app并不應該在activity中處理數(shù)據(jù)的具體邏輯,所以更新的方法在viewmodel中編寫。

viewmodel的代碼更新為如下:

import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MutableLiveData/*** @author zengyifeng* @date createDate:2023-09-30* @brief description ViewModel*/
class MainViewModel(application: Application) : AndroidViewModel(application) {var nationalDayLiveData : MutableLiveData<Int> = MutableLiveData(8)fun setNationalDay(day : Int){val myDay = getNationalDay(day)nationalDayLiveData.postValue(myDay)}/*** 偽代碼,實際業(yè)務中這里的返回應該是網(wǎng)絡請求獲取返回數(shù)據(jù)這樣子*/private var nationalDay = 8private fun getNationalDay(day : Int): Int{nationalDay -= dayreturn  nationalDay}}

而activity代碼最終如下:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextViewclass MainActivity : AppCompatActivity() {private lateinit var viewModel : MainViewModel
private lateinit var textView : TextViewoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)initView()initViewModel()initObserve()}private fun initView() {textView = findViewById(R.id.tv_national_day)val button = findViewById<Button>(R.id.bt_national_day)button.setOnClickListener {viewModel.setNationalDay(1)}}private fun initViewModel() {viewModel = MainViewModel(application)viewModel.setNationalDay(0)}private fun initObserve() {viewModel.nationalDayLiveData.observe(this) {textView.text = "國慶節(jié)還有$it 天"}}
}

上例代碼中,我們通過MutableLiveData 初始化了一個 nationalDayLiveData對象,然后通過observe觀察nationalDayLiveData對象,最后通過postValue更新nationalDayLiveData對象,最后將數(shù)據(jù)更新在UI上。


總結

以上就是今天要講的內(nèi)容,本文簡單介紹了LiveData是什么及其使用,通過創(chuàng)建觀察更新六字口訣初步掌握LiveData的使用。

http://aloenet.com.cn/news/37434.html

相關文章:

  • DW做網(wǎng)站下拉列表怎么做寧波seo怎么做推廣渠道
  • 唐山盤古做網(wǎng)站多少錢長尾詞seo排名
  • 政府網(wǎng)站建設調(diào)研報告營銷型網(wǎng)站優(yōu)化
  • 運營推廣的網(wǎng)站有哪些亞洲足球最新排名
  • 哪些網(wǎng)站做二手挖機微信社群營銷推廣方案
  • 國內(nèi)互動網(wǎng)站建設江門網(wǎng)站定制多少錢
  • 申請免費網(wǎng)站建設seo排名優(yōu)化
  • 汕頭建設吧百度貼吧seo外包優(yōu)化公司
  • ecshop商城網(wǎng)站建設seo搜索優(yōu)化工具
  • 做網(wǎng)站制作需要多少錢最新國內(nèi)新聞重大事件
  • 宜賓網(wǎng)站建設費用抖音推廣引流
  • 阿里云網(wǎng)站建設方案書模板網(wǎng)站搜索引擎優(yōu)化診斷
  • 在百度上做網(wǎng)站西安百度推廣優(yōu)化托管
  • 做金館長網(wǎng)站網(wǎng)站寧寧網(wǎng)seo
  • 網(wǎng)站建設人才百度云怎么找資源
  • 任丘做網(wǎng)站現(xiàn)在什么app引流效果好
  • 北京疫情有多嚴重網(wǎng)站推廣優(yōu)化平臺
  • 樓盤銷售管理網(wǎng)站開發(fā)資源官網(wǎng)關鍵詞優(yōu)化價格
  • 比價網(wǎng)官網(wǎng)安卓神級系統(tǒng)優(yōu)化工具
  • 常州市建設局網(wǎng)站專業(yè)的網(wǎng)站優(yōu)化公司排名
  • 競價網(wǎng)站如何設計廣州seo優(yōu)化費用
  • 各大招聘網(wǎng)站濟南百度推廣代理商
  • wordpress數(shù)據(jù)庫發(fā)布文章做網(wǎng)絡優(yōu)化哪家公司比較好
  • 可以做代發(fā)貨源的網(wǎng)站seo外包公司怎么樣
  • 公眾號做視頻網(wǎng)站會封嗎市場推廣方案范文
  • 建設一個網(wǎng)站需要什么西安網(wǎng)站seo費用
  • 禪城網(wǎng)站建設報價網(wǎng)站首頁排名seo搜索優(yōu)化
  • 電子商務網(wǎng)站建設和管理的含義百度競價登陸
  • vs網(wǎng)站畢業(yè)設計怎么做西安seo網(wǎng)絡推廣
  • b2b b2c 網(wǎng)站建設seo網(wǎng)站關鍵詞優(yōu)化多少錢