栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ViewModel 初体验

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ViewModel 初体验

ViewModel旨在以生命周期意识的方式存储和管理用户界面相关的数据,它可以用来管理Activity和Fragment中的数据.还可以拿来处理Fragment与Fragment之间的通信等等.

基本使用  1.导入依赖
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
2.创建实体对象
public class User implements Serializable {
    String name;
    int age;

    public User(String name,int age){
        this.name = name;
        this.age = age;
    }
}
3.创建 userModel 数据模型
public class UserModel extends ViewModel {
    public MutableLiveData mLiveData = new MutableLiveData<>();

    public UserModel(){
        //初始值
        mLiveData.postValue(new User("wang",20));
    }

    //更新操作
    public void doSomething(){
        User user = mLiveData.getValue();
        user.name = "重新设置的数据";
        mLiveData.setValue(user);
    }
}
4.activity引用
        UserModel userModel = ViewModelProviders.of(this).get(UserModel.class);
        userModel.mLiveData.observe(this, new Observer() {
            @Override
            public void onChanged(User user) {
                mMain2Binding.name.setText(user.name);
            }
        });
 public void onClick(View view) {
        switch (view.getId()) {
            case R.id.updateUser:
                userModel.doSomething();
                Log.e("tag","onclick");
                break;
        }
    }
5. ViewModel妙用 1: Activity与Fragment"通信"


有了ViewModel,Activity与Fragment可以共享一个ViewModel,因为Fragment是依附在Activity上的,在实例化ViewModel时将该Activity传入ViewModelProviders,它会给你一个该Activity已创建好了的ViewModel,这个Fragment可以方便的访问该ViewModel中的数据.在Activity中修改userModel数据后,该Fragment就能拿到更新后的数据.

public class MyFragment extends Fragment {
     public void onStart() {
        //这里拿到的ViewModel实例,其实是和Activity中创建的是一个实例
         UserModel userModel = ViewModelProviders.of(getActivity()).get(UserModel.class);
     }
 }


2: Fragment与Fragment"通信"


下面我们来看一个例子(Google官方例子)

public class SharedViewModel extends ViewModel {
    private final MutableLiveData selected = new MutableLiveData();

    public void select(Item item) {
        selected.setValue(item);
    }

    public LiveData getSelected() {
        return selected;
    }
}


public class MasterFragment extends Fragment {
    private SharedViewModel model;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        itemSelector.setOnClickListener(item -> {
            model.select(item);
        });
    }
}

public class DetailFragment extends Fragment {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        model.getSelected().observe(this, { item ->
           // Update the UI.
        });
    }
}

首先定义一个ViewModel,在里面放点数据,然后在MasterFragment和DetailFragment都可以拿到该ViewModel,拿到了该ViewModel就可以拿到里面的数据了,相当于间接通过ViewModel通信了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006228.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号