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);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM