AndroidViewModel
让MyViewModel继承自AndroidViewModel
这样可以使MyViewModel访问全局资源
MainActivity
package com.example.viewmodelshp;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.SavedStateViewModelFactory;
import androidx.lifecycle.ViewModelProvider;
import android.os.Bundle;
import com.example.viewmodelshp.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
MyViewModel myViewModel;
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
binding= DataBindingUtil.setContentView(this,R.layout.activity_main);
myViewModel=new ViewModelProvider(this,new SavedStateViewModelFactory(getApplication(),this)).get(MyViewModel.class);
binding.setData(myViewModel);
binding.setLifecycleOwner(this);
}
@Override
protected void onPause() {
super.onPause();
myViewModel.save();
}
}
MyViewModel
package com.example.viewmodelshp; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.SavedStateHandle; @SuppressWarnings("ConstantConditions") public class MyViewModel extends AndroidViewModel { private SavedStateHandle handle; private String key = getApplication().getResources().getString(R.string.data_key); private String shpname = getApplication().getResources().getString(R.string.shp_name); public MyViewModel(Application application, SavedStateHandle handle) { super(application); this.handle = handle; if (!handle.contains(key)) { load(); } } public LiveData<Integer> getNumber() { return handle.getLiveData(key); } private void load() { SharedPreferences shp = getApplication().getSharedPreferences(shpname, Context.MODE_PRIVATE); int x = shp.getInt(key, 0); handle.set(key, x); } public void save() { SharedPreferences shp = getApplication().getSharedPreferences(shpname, Context.MODE_PRIVATE); SharedPreferences.Editor editor = shp.edit(); editor.putInt(key, getNumber().getValue()); editor.apply(); } public void add(int x) { handle.set(key, getNumber().getValue() + x); // save(); } }
浙公网安备 33010602011771号