Android实现MVVM架构数据刷新详解流程

目录

  • 效果图
  • 示例结构图
    • 代码解析
      • 导入dataBinding
      • 实体类
      • xml视图
      • VM
      • 绑定视图与数据层

效果图 Android实现MVVM架构数据刷新详解流程
文章图片


示例结构图 Android实现MVVM架构数据刷新详解流程
文章图片


代码解析

导入dataBinding
dataBinding{enabled = true}


实体类 继承BaseObservable
public class Sensor extends BaseObservable

为字段添加@Bindable
@Bindablepublic String getTmpValue() {return tmpValue; }

显示图片
图片添加@BindingAdapter
@BindingAdapter( "tmpImage" )

示例采用本地图片,没有采用网络图片
@BindingAdapter( "tmpImage" )public static void setTmpImage(ImageView view, int tmpImage) {view.setImageDrawable( view.getContext().getResources().getDrawable( tmpImage ) ); }

为图片路径绑定字段
@Bindablepublic int getTmpImage() {return tmpImage; }

绑定实体类

根据设置@BindingAdapter( “tmpImage” )设置里的内容,设置属性

实体类全部代码
public class Sensor extends BaseObservable {private String tmpValue; private String humValue; private String lightValue; private String humanValue; private String smokeValue; private String fireValue; private int tmpImage; private int humImage; private int lightImage; private int humanImage; private int smokeImage; private int fireImage; public Sensor(){}public Sensor(int tmpImage,int humImage,int lightImage,int humanImage,int smokeImage,int fireImage){this.tmpImage = tmpImage; this.humImage = humImage; this.lightImage = lightImage; this.humanImage = humanImage; this.smokeImage = smokeImage; this.fireImage = fireImage; }@Bindablepublic String getTmpValue() {return tmpValue; }public void setTmpValue(String tmpValue) {this.tmpValue = https://www.it610.com/article/tmpValue; notifyPropertyChanged( BR.tmpValue ); }@Bindablepublic String getHumValue() {return humValue; }public void setHumValue(String humValue) {this.humValue = humValue; notifyPropertyChanged( BR.humValue ); }@Bindablepublic String getLightValue() {return lightValue; }public void setLightValue(String lightValue) {this.lightValue = lightValue; notifyPropertyChanged( BR.lightValue ); }@Bindablepublic String getHumanValue() {return humanValue; }public void setHumanValue(String humanValue) {this.humanValue = humanValue; notifyPropertyChanged( BR.humanValue ); }@Bindablepublic String getSmokeValue() {return smokeValue; }public void setSmokeValue(String smokeValue) {this.smokeValue = smokeValue; notifyPropertyChanged( BR.smokeValue ); }@Bindablepublic String getFireValue() {return fireValue; }public void setFireValue(String fireValue) {this.fireValue = fireValue; notifyPropertyChanged( BR.fireValue ); }@Bindablepublic int getTmpImage() {return tmpImage; }@BindingAdapter("tmpImage" )public static void setTmpImage(ImageView view, int tmpImage) {view.setImageDrawable( view.getContext().getResources().getDrawable( tmpImage ) ); }@Bindablepublic int getLightImage() {return lightImage; }@BindingAdapter( "lightImage" )public static void setLightImage(ImageView view,int lightImage) {view.setImageDrawable( view.getContext().getResources().getDrawable( lightImage ) ); }@Bindablepublic int getHumanImage() {return humanImage; }@BindingAdapter( "humanImage" )public static void setHumanImage(ImageView view,int humanImage) {view.setImageDrawable( view.getContext().getResources().getDrawable( humanImage ) ); }@Bindablepublic int getSmokeImage() {return smokeImage; }@BindingAdapter( "smokeImage" )public static void setSmokeImage(ImageView view,int smokeImage) {view.setImageDrawable( view.getContext().getResources().getDrawable( smokeImage ) ); }@Bindablepublic int getFireImage() {return fireImage; }@BindingAdapter( "fireImage" )public static void setFireImage(ImageView view,int fireImage) {view.setImageDrawable( view.getContext().getResources().getDrawable( fireImage ) ); }@Bindablepublic int getHumImage() {return humImage; }@BindingAdapter( "humImage" )public static void setHumImage(ImageView view,int humImage) {view.setImageDrawable( view.getContext().getResources().getDrawable( humImage ) ); }}


xml视图


VM 接收数据
调用Handle类的接口,接收传感器数据(随机数据)
private void InitData(){handle.setHandleDta( new Handle.HandleData() {@Overridepublic void getSensorValue(int[] value) {new Thread( ()->{while (true){try {Thread.sleep( 5000 ); } catch (InterruptedException e) {e.printStackTrace(); }sensor.setTmpValue( value[0]+"℃"); sensor.setHumValue( value[1]+"RH" ); sensor.setLightValue( value[2]+"LUX" ); sensor.setSmokeValue( value[3]+"%" ); sensor.setFireValue( value[4]+"%" ); sensor.setHumanValue( value[5] == 1 ? "有人" : "无人" ); }} ).start(); }}); }

发送数据
建立接口,回调数据
public interface HandleData{void getSensorValue(int[] value); }public void setHandleDta(HandleData handleDta){int[] value = https://www.it610.com/article/ReturnData(); handleDta.getSensorValue(value); }

【Android实现MVVM架构数据刷新详解流程】制造数据
private void RefreshSensorValue(){thread = new Thread( ()->{while (true){try {Thread.sleep( 2000 ); } catch (InterruptedException e) {e.printStackTrace(); }/*温度*/value[0] = RandomRange(35,30); /*湿度*/value[1] = RandomRange(80,75); /*光照值*/value[2] = RandomRange(120,100); /*烟雾*/value[3] = RandomRange(60,50); /*火焰*/value[4] = RandomRange(30,25); /*红外*/value[5] = RandomRange(2,0); Log.d( "TAG",value[5]+"" ); }} ); thread.start(); }


绑定视图与数据层
public class MainActivity extends AppCompatActivity {private ActivityMainBinding binding; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate( savedInstanceState ); binding = DataBindingUtil.setContentView( this,R.layout.activity_main ); binding.setViewmodel( new ViewModel() ); }}

到此这篇关于Android实现MVVM架构数据刷新详解流程的文章就介绍到这了,更多相关Android 数据刷新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读