Android---AndroidViewModel
19580 단어 Android
AndroidViewModel 은 향후 소개될 예정입니다.간단한 sp 수치 저장 동작을 만듭니다.우리가 프로그램을 끄고 다시 열면 수치가 다시 나타납니다
SharedPreferences는 Context를 상속하는 인터페이스이기 때문입니다.그래서 대상을 얻으려면 context가 필요합니다.
AndroidViewModel:
public class MyViewModel extends AndroidViewModel {
SavedStateHandle handle;
String key = getApplication().getResources().getString(R.string.data_key);
String spName = getApplication().getResources().getString(R.string.sp_name);
public MyViewModel(@NonNull 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 sp = getApplication().getSharedPreferences(spName, Context.MODE_PRIVATE);
int x = sp.getInt(key, 0);
handle.set(key, x);
}
public void save() {
SharedPreferences sp = getApplication().getSharedPreferences(spName, Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sp.edit();
edit.putInt(key, getNumber().getValue());
edit.apply();
}
public void add(int x) {
handle.set(key, getNumber().getValue() + x);
}
}
java:
private MyViewModel viewModel;
private ActivityViewModelTestBinding bindingBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bindingBinding= DataBindingUtil.setContentView(this, R.layout.activity_view_model_test);
viewModel=new ViewModelProvider(this).get(MyViewModel.class);
bindingBinding.setData(viewModel);//.setXxx(yyy)。Xxx data name
bindingBinding.setLifecycleOwner(this);// ,
}
@Override
protected void onPause() {
super.onPause();
viewModel.save();
}
xml:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="data"
type="com.example.viewmodeltest.MyViewModel" />
data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tv_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{String.valueOf(data.getNumber)}"/>
<Button
android:id="@+id/btn_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{()->data.add(1)}"
android:text="@string/add"/>
<Button
android:id="@+id/btn_two"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{()->data.add(-1)}"
android:text="@string/sub"/>
LinearLayout>
layout>
위의 Adnroid View 모델 중 이save 방법을 어디서 실행하는 것이 좋을지 생각해 볼 필요가 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.