ViewModel
簡介
ViewModel 允許數據在配置更改(如屏幕旋轉)后仍然存在,使用 ViewModel 可以免去開發者花費大量時間精力處理Activity生命周期變化導致的數據刷新重建后的恢復問題。
我們使用創建工程時,系統自動為我們添加的Text組件作為示范。
ViewModel的使用方法
Step 1:創建ViewModel類
在當前工程文件app -> java -> com.example.name層級上,右鍵new,選擇java class。輸入類名稱,在super class一欄填寫 androidx.lifecycle.ViewModel,點擊OK完成創建。
如圖:

Step 2:編寫ViewModel類內容(包括變量、方法等)
接下來在ViewModel類中,實現對組件UI數據的控制。我們設置一個number變量作為Text組件的值。設置ClickText方法在用戶點擊Text組件的時候,實現其數值加一。
/* ViewModelTest 中的內容 */
package com.hello.livedata;
import androidx.lifecycle.ViewModel;
public class ViewModelTest extends ViewModel {
private int number=0;
/* getNumber方法返回private變量number的值 */
public int getNumber() {
return number;
}
/* getNumber方法返回private變量number+1的值 */
public int numberPlus() {
number++;
return number;
}
}
Step 3:在Activity中進行ViewModel綁定,以及控制
在此之前,需要進入activity_main.xml 界面,單擊design頁面的hello world的Textview,為其設置ID。如圖:

設置完TextView組件的ID值后,就可以通過MainActivity.java文件綁定ViewModel並進行控制。
package com.hello.livedata;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders; /* 引入ViewModelProviders類,並單擊紅色部分文字后
點擊左邊出現的紅色小燈泡選擇引入依賴 */
public class MainActivity extends AppCompatActivity {
ViewModelTest myViewModel; /* 新建ViewModel的實例*/
TextView textView; /* 新建textView實例*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* 在onCreate中,將myViewModel與class綁定 */
myViewModel = ViewModelProviders.of(this).get(ViewModelTest.class);
/* 將textView實例通過ID與activity_main.xml中的組件綁定 */
textView = findViewById(R.id.textview01);
/* 當Activity的生命周期改變,如因屏幕旋轉而導致的重建時,直接讀取ViewModel中的數據傳送給組件*/
textView.setText(String.valueOf(myViewModel.getNumber()));
/* 為textView設置監聽器,當單擊時,觸發ViewModel中的方法改變TextView值 */
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setText(String.valueOf(myViewModel.numberPlus()));
}
});
}
}
Step 4:運行
使用Shift+F10在模擬器中運行程序,得到設想的結果。如下圖所示,即使屏幕旋轉,數據依舊可以通過ViewModel非常便捷地恢復。