zoukankan      html  css  js  c++  java
  • JetPack入门(一)

    JetPack

    Jetpack是一套库、工具和指导,可以帮助开发人员更轻松地编写高质量的应用程序。这些组件帮助您遵循最佳实践,将您从编写样板代码中解放出来,并简化复杂的任务,这样您就可以专注于您关心的代码了

    ViewModel&LiveData

    ViewModel类被设计成以生命周期的方式存储和管理ui相关的数据。ViewModel类允许数据在配置更改(如屏幕旋转)后仍然存在。

    LiveData是一个可观察的数据持有者类。与常规的可观察对象不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,比如活动、片段或服务。这种意识确保LiveData只更新处于活动生命周期状态的应用程序组件观察者。

    public class MyViewModelWithLiveData extends ViewModel {
      // 数据
        private MutableLiveData<Integer> likeNumber;
        public MutableLiveData<Integer> getLikeNumber() {
            if (likeNumber == null){
                likeNumber = new MutableLiveData<>();
                likeNumber.setValue(0);
            }
            return likeNumber;
        }
        public void addLikeNumber(int add){
            likeNumber.setValue(likeNumber.getValue()+add);
        }
    }
    

    监听数据改变

            mModelWithLiveData = new ViewModelProvider(this).get(MyViewModelWithLiveData.class);
            mModelWithLiveData.getLikeNumber().observe(this, new Observer<Integer>() {
                @Override
                public void onChanged(Integer integer) {
                    //改变界面数据
                    mTextView.setText(String.valueOf(integer));
                }
            });
    

    DataBinding

    数据绑定库是一个支持库,允许您使用声明格式(而不是编程方式)将布局中的UI组件绑定到应用程序中的数据源。

    在当前模块下的gradle文件下添加如下配置

    android {
        ...
        dataBinding {
            enabled = true
        }
    }
    
    

    用layout包装原布局代码

    variable字段中name可以理解为ViewModel的实例对象,type指定ViewModel类

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
        <data>
            <variable
                name="data"
                type="com.example.collectiondemoandroid.MyViewModelWithLiveData"/>
     
        </data>
       <LinearLayout
            ......
       </LinearLayout>
    </layout>
    
    • 绑定值
      <TextView
           android:id="@+id/textView"
           android:text="@{String.valueOf(data.likeNumber)}"
     />
    
    • 绑定方法
            <ImageButton
                android:id="@+id/upButton"
                android:onClick="@{()->data.addLikeNumber(2)}"
                />
    

    绑定视图

    'ActivityMainBinding' 命名方式为layout的名称加Binding

     ActivityMainBinding dataBinding;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            dataBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
    //  获取控件      dataBinding.upButton
    
            //获取viewmodel对象
            mModelWithLiveData = new ViewModelProvider(this).get(MyViewModelWithLiveData.class);        
            //设置数据
            dataBinding.setData(mModelWithLiveData);
            //设置监听
            dataBinding.setLifecycleOwner(this);
     
       }
    

    Saved State module for ViewModel

    当应用被系统Kill下次直接恢复上次的数据
    使用也很简单,其实只需要将上面的MyViewModelWithLiveData进行如下的修改就行

    1. SavedStateHandle对象管理数据
    2. 添加构造函数传入 SavedStateHandle对象

    SavedStateHandle方法如下

    • get(String key)
    • contains(String key)
    • remove(String key)
    • set(String key, T value)
    • keys()
    • getLiveData()
    public class MyViewModelWithLiveData extends ViewModel {
    
        final  public static String LIKEKEY = "likenumber";
        private SavedStateHandle mSavedStateHandle;
        //构造函数
        public  MyViewModelWithLiveData(SavedStateHandle savedStateHandle){
           mSavedStateHandle = savedStateHandle;
        }
        public MutableLiveData<Integer> getLikeNumber() {
            if (!mSavedStateHandle.contains(LIKEKEY)){
                mSavedStateHandle.set(LIKEKEY,0);
            }
            //以LiveData的形式去除
         return mSavedStateHandle.getLiveData(LIKEKEY);
    
        }
        public void addLikeNumber(int add){
            getLikeNumber().setValue(getLikeNumber().getValue()+add);
        }
    }
    
  • 相关阅读:
    iOS工作笔记(十二)
    隐藏底部导航栏tabbar
    SDWebImage的使用及图片不改变问题的解决
    NSString转化为NSDictionary
    makeObjectsPerformSelector用法
    iOS中点与像素
    iOS动画的简单介绍
    Pods安装时卡在Updating local specs repositories界面时的处理
    使用uicollectionView时需要注意的问题
    Sublime Text 3 自定义配置快捷键
  • 原文地址:https://www.cnblogs.com/cnman/p/12944505.html
Copyright © 2011-2022 走看看