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

Android(数据管理)-ViewModel&liveData&DataBinding

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

Android(数据管理)-ViewModel&liveData&DataBinding

ViewModel 创建类
package com.example.navigationdemo;

import androidx.lifecycle.ViewModel;

public class MyViewModel extends ViewModel {
    public int num = 0;
}
在acvivity 反射获取
//通过反射拿到对象
        myViewModel = new ViewModelProvider(this).get(MyViewModel.class);

类中属性变量自己定义

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //通过反射拿到对象
        myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
        button=findViewById(R.id.button2);
        textView = findViewById(R.id.textView4);
        button.setonClickListener(new View.onClickListener() {
            @Override
            public void onClick(View v) {
                myViewModel.num++;
                textView.setText(String.valueOf(myViewModel.num));
            }
        });



        navController = Navigation.findNavController(this, R.id.fragment);
        //actionBar 左上角后退键
        NavigationUI.setupActionBarWithNavController(this, navController);

    }

 liveData  新建  ViewModelLiveData 类
package com.example.navigationdemo;

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

public class ViewModelLiveData extends ViewModel {
    //管理数据
    private MutableLiveData mutableLiveData;
    
    public MutableLiveData getMutableLiveData() {
        //默认值
        if (mutableLiveData == null) {
            this.mutableLiveData = new MutableLiveData();
            mutableLiveData.setValue(0);

        }
        return mutableLiveData;
    }

    public void setMutableLiveData(MutableLiveData mutableLiveData) {
        this.mutableLiveData = mutableLiveData;
    }
     
    public void addMutableLiveData(int i) {
        mutableLiveData.setValue(mutableLiveData.getValue()+i);
    }
}
acvivity

变量自己定义

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //通过反射拿到对象
        viewModelLiveData = new ViewModelProvider(this).get(ViewModelLiveData.class);
        button=findViewById(R.id.button2);
        textView = findViewById(R.id.textView4);
        //监听数据变化 如果变化,就会触发 onChange 变化
        viewModelLiveData.getMutableLiveData().observe(this, new Observer() {
            @Override
            public void onChanged(Integer integer) {
                textView.setText(String.valueOf(integer));
            }
        });
        button.setonClickListener(new View.onClickListener() {
            @Override
            public void onClick(View v) {
                viewModelLiveData.addMutableLiveData(1);

            }
        });



     

    }
DataBinding 双向绑定 设置的bulid.gradle
 dataBinding {
        enabled = true
    }

 

 

定义ViewModel
package com.example.navigationdemo;

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

public class ViewModelLiveData extends ViewModel {
    //管理数据
    private MutableLiveData mutableLiveData;
    public MutableLiveData getMutableLiveData() {
        //默认值
        if (mutableLiveData == null) {
            this.mutableLiveData = new MutableLiveData();
            mutableLiveData.setValue(0);

        }
        return mutableLiveData;
    }
    public void setMutableLiveData(MutableLiveData mutableLiveData) {
        this.mutableLiveData = mutableLiveData;
    }
    //执行方法
    public void addMutableLiveData() {
        mutableLiveData.setValue(mutableLiveData.getValue()+1);
    }
}
activity.xml

选中  第一行 alt+enter

会被layout 标签包裹,出现data标签

type 用来绑定viewModel

使用参数 @{String.valueOf(data.mutableLiveData)}  

String.valueOf() 只是为了用java 语法转成字符串

调用方法   android:onClick="@{()->data.addMutableLiveData()}"




    
        

    

    

        
Activity.java
package com.example.navigationdemo;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.NavigationUI;
import android.os.Bundle;
import com.example.navigationdemo.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {
  
    ViewModelLiveData viewModelLiveData;
    ActivityMainBinding mainBinding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_main);
        //dataBinding 渲染activity.xml 返回值可以获取组件
        mainBinding=  DataBindingUtil.setContentView(this, R.layout.activity_main);
        //通过反射拿到对象
        viewModelLiveData = new ViewModelProvider(this).get(ViewModelLiveData.class);
        //绑定viewModel
        mainBinding.setData(viewModelLiveData);
        //监听自我
        mainBinding.setLifecycleOwner(this);
       
    }

   
}

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

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

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