android viewmodel第二集 livedata基本使用

前言

各位同學(xué)大家好狱从, 最近在學(xué)習(xí)livedata的基礎(chǔ)知識(shí)所以就分享給大家 那么廢話不多說我們正式開始商玫。

效果圖:

image.png

image.png

image.png

具體實(shí)現(xiàn):

我們可以觀察上面的案例 我們點(diǎn)擊button 個(gè)一秒鐘 我們的textview 會(huì)自增1 而且橫豎屏切換的時(shí)候 不會(huì)受到影響導(dǎo)致數(shù)據(jù)丟失:

  • 創(chuàng)建 MyViewModel

package com.cbhx.livedatademo;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class MyViewModel   extends ViewModel {
    private MutableLiveData<Integer>currentSecond;
    public    MutableLiveData<Integer>getCurrentSecond(){
        if(currentSecond==null){
            currentSecond=new MutableLiveData<>();
            currentSecond.setValue(0);
        }
        return currentSecond;
    }

}

創(chuàng)建我們的 MyViewModel 繼承 ViewModel 然后定義 private MutableLiveData<Integer>currentSecond; 變量 和 getCurrentSecond 方法 并初始化設(shè)置value 為0

MainActivity 邏輯

  • 布局
<?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">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
         android:textSize="30dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_marginStart="151dp"
        android:layout_marginTop="99dp"
        android:layout_marginEnd="166dp"
        android:textSize="15dp"
        android:text="開始"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>
  • 布局效果

image.png

具體邏輯

 protected MyViewModel viewModel;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        viewModel = new ViewModelProvider(this, new
                ViewModelProvider.AndroidViewModelFactory(getApplication())).get(MyViewModel.class);
        viewModel.getCurrentSecond().observe(this, new Observer<Integer>() {
            @Override
            public void onChanged(Integer integer) {
                textView.setText(String.valueOf(integer));
            }
        });

        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startTime();
            }
        });
    }

實(shí)例化我們 viewmodel 后通過 observe 拿掉回調(diào)結(jié)果然后顯示在UI textview 上面

定時(shí)器邏輯

  private  void  startTime(){
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                viewModel.getCurrentSecond().postValue(viewModel.getCurrentSecond().getValue()+1);
            }
        },1000,1000);
    }

我們設(shè)置 一秒鐘執(zhí)行一次 并且去更新 value 的值 這樣當(dāng)我們點(diǎn)擊button點(diǎn)擊事件的時(shí)候 我們的定時(shí)器就每間隔一秒鐘自增一 而且我們在橫豎屏切換我們textview 也沒沒有數(shù)據(jù)丟失清零灿巧。

最后總結(jié):

對比常規(guī)的寫法我們寫一個(gè)變量賦值 我們livedata 很好保存了 瞬時(shí)數(shù)據(jù) 并且在界面旋轉(zhuǎn)的時(shí)候不會(huì)丟失 解決瞬態(tài)數(shù)據(jù)丟失 的問題 非常的直觀 而且代碼也不多很好的解決了我們實(shí)際的問題 那么其他viewmodel特性 我會(huì)在后面的章節(jié)里面一一講到 砚哗。最后希望我的文章能幫助到各位解決問題 缸濒,以后我還會(huì)貢獻(xiàn)更多有用的代碼分享給大家锅知。各位同學(xué)如果覺得文章還不錯(cuò) 妇拯,麻煩給關(guān)注和star幻馁,小弟在這里謝過啦!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洗鸵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仗嗦,更是在濱河造成了極大的恐慌膘滨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稀拐,死亡現(xiàn)場離奇詭異火邓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)德撬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門铲咨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜓洪,你說我怎么就攤上這事纤勒。” “怎么了隆檀?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵摇天,是天一觀的道長。 經(jīng)常有香客問我恐仑,道長泉坐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任裳仆,我火速辦了婚禮腕让,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鉴逞。我一直安慰自己记某,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布构捡。 她就那樣靜靜地躺著液南,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勾徽。 梳的紋絲不亂的頭發(fā)上滑凉,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音喘帚,去河邊找鬼畅姊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吹由,可吹牛的內(nèi)容都是我干的若未。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼倾鲫,長吁一口氣:“原來是場噩夢啊……” “哼粗合!你這毒婦竟也來了萍嬉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤隙疚,失蹤者是張志新(化名)和其女友劉穎壤追,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體供屉,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡行冰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伶丐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悼做。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哗魂,靈堂內(nèi)的尸體忽然破棺而出贿堰,到底是詐尸還是另有隱情,我是刑警寧澤啡彬,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布羹与,位于F島的核電站,受9級(jí)特大地震影響庶灿,放射性物質(zhì)發(fā)生泄漏纵搁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一往踢、第九天 我趴在偏房一處隱蔽的房頂上張望腾誉。 院中可真熱鬧,春花似錦峻呕、人聲如沸利职。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猪贪。三九已至,卻和暖如春讯私,著一層夾襖步出監(jiān)牢的瞬間热押,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工斤寇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桶癣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓娘锁,卻偏偏與公主長得像牙寞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子莫秆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容