ViewModel与LiveData的简单使用

本文详细介绍了如何在Android应用中使用LiveData和ViewModel进行数据管理。首先,展示了如何创建一个ViewModel类,然后演示了如何实例化ViewModel,创建Observer监听器,并绑定到UI组件。文章还提到了对LiveData的优化管理,通过单例模式实现全局事件总线。
摘要由CSDN通过智能技术生成

使用注意点

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

super码王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值