日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

android ViewModel+LiveData簡單使用

作者:一直向錢 更新時間: 2022-05-12 編程語言

ViewModel是視圖與數據模型之間的橋梁

LiveData可以理解為當數據發生改變的時候,通過LiveData通知UI視圖進行更新主線程頁面

activity代碼

package com.nyw.viewmodeldemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.nyw.viewmodeldemo.model.MyViewModel;

import java.util.Timer;
import java.util.TimerTask;

/**
 * 使用viewModel實現計數累加,數據保存到viewModel里,豎屏或橫屏切換保存數據不變
 * ViewModel 不受生命周期影響,以Map形式保存數據
 * 不要向ViewModel中傳入Content 會導致內存泄漏,如果要使用Content,就使用AndroidViewModel中的Application,也就是說MyViewModel自定義要換成繼承AndroidViewModel實現方法,可以使用application
 * 例如MyAndroidViewModel
 * myViewModel數據更新,通過LiveData通知ui進行更新數據顯示
 */
public class MainActivity extends AppCompatActivity {
    private TextView textView,textView_msg;
    private MyViewModel myViewModel;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myViewModel=new ViewModelProvider(this,new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(MyViewModel.class);
        textView=findViewById(R.id.textView);
        textView.setText(myViewModel.number+"");
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText((++myViewModel.number)+"");
            }
        });
        textView_msg=findViewById(R.id.textView_msg);
        //LiveData
        textView_msg.setText(myViewModel.getCurrentSecong().getValue().toString());
        //監聽ViewModel值發生變化,就執行更新UI
        myViewModel.getCurrentSecong().observe(this, new Observer() {
            @Override
            public void onChanged(Integer integer) {
                //更新UI
                textView_msg.setText(integer.toString());
            }
        });
        startTimer();
    }

    /**
     * 每1秒修改一次viewModel值
     */
    private void startTimer() {
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                //ui線程使用setValue
                //非UI線程用 postValue
                myViewModel.getCurrentSecong().postValue(myViewModel.getCurrentSecong().getValue()+1);
            }
        },1000,1000);
    }
}
package com.nyw.viewmodeldemo.model;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class MyViewModel extends ViewModel {
    public int number;
    private MutableLiveData currentSecond;
    //LiveData使用,創建一個方法,new 一個LiveData對象并且返回對象使用
    public MutableLiveData getCurrentSecong(){
        if (currentSecond==null){
            currentSecond=new MutableLiveData<>();
            //設置一個默認值
            currentSecond.setValue(0);
        }
        return currentSecond;
    }
}

?

原文鏈接:https://blog.csdn.net/u013519290/article/details/123817205

欄目分類
最近更新