ViewModel与LiveData的简单使用
Posted super码王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ViewModel与LiveData的简单使用相关的知识,希望对你有一定的参考价值。
使用注意点
LiveData与ViewModel一般都是配合着一起使用。
第一步:创建ViewModel类
package com.example.jetpackdemo03;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class NameViewModel extends ViewModel
private MutableLiveData<String> currentName;
public int i;
public MutableLiveData<String> getCurrentName()
if (currentName == null)
currentName = new MutableLiveData<>();
return currentName;
第二步:实例化 ViewModel 、创建监听者、绑定监听者
package com.example.jetpackdemo03;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity
private NameViewModel model;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件
Button btn = findViewById(R.id.btn);
TextView tv = findViewById(R.id.tv);
// ViewModel 实例的创建
ViewModelProvider.AndroidViewModelFactory instance = ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication());
model = new ViewModelProvider(this, instance).get(NameViewModel.class);
//需要一个观察者来观察数据
Observer observer = new Observer<String>()
@Override
public void onChanged(String string)
tv.setText(string);
;
//订阅
model.getCurrentName().observe(this, observer);
//设置点击事件
btn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
model.getCurrentName().setValue("wustyq" + (model.i++));
);
优化 LiveData 的管理
- 使用单例模式
package com.example.jetpackdemo03;
import androidx.lifecycle.MutableLiveData;
import java.util.HashMap;
import java.util.Map;
public class LiveDataBus
//存放订阅者
private Map<String, MutableLiveData<Object>> bus;
private static LiveDataBus liveDataBus = new LiveDataBus();
public LiveDataBus()
bus = new HashMap<>();
private static LiveDataBus getInstance()
return liveDataBus;
//注册订阅者
public synchronized <T> MutableLiveData<T> with(String key, Class<T> type)
if (!bus.containsKey(key))
bus.put(key, new MutableLiveData<Object>());
return (MutableLiveData) bus.get(key);
以上是关于ViewModel与LiveData的简单使用的主要内容,如果未能解决你的问题,请参考以下文章
JetpackLiveData 架构组件 ( LiveData 简介 | LiveData 使用方法 | ViewModel + LiveData 示例 )
JetpackLiveData 架构组件 ( LiveData 简介 | LiveData 使用方法 | ViewModel + LiveData 示例 )
使用 ViewModel 和 LiveData 递增变量的简单片段示例 - 变量始终为空
Android ViewModel与LiveData组件组合使用详解