直接看activity代码
package com.nyw.viewmodeldemo;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.nyw.viewmodeldemo.model.MyViewModel;
/**
* 使用viewModel实现计数累加,数据保存到viewModel里,竖屏或横屏切换保存数据不变
* ViewModel 不受生命周期影响,以Map形式保存数据
* 不要向ViewModel中传入Content 会导致内存泄漏,如果要使用Content,就使用AndroidViewModel中的Application,也就是说MyViewModel自定义要换成继承AndroidViewModel实现方法,可以使用application
* 例如MyAndroidViewModel
*/
public class MainActivity extends AppCompatActivity {
private TextView textView;
private MyViewModel myViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myViewModel=new ViewModelProvider(this,new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(MyViewModel.class);
textView=findViewById(R.id.textView);
textView.setText(myViewModel.number+"");
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setText((++myViewModel.number)+"");
}
});
}
}
package com.nyw.viewmodeldemo.model;
import androidx.lifecycle.ViewModel;
public class MyViewModel extends ViewModel {
public int number;
}
xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.777" />
</androidx.constraintlayout.widget.ConstraintLayout>
MyAndroidViewModel
package com.nyw.viewmodeldemo.model;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
public class MyAndroidViewModel extends AndroidViewModel {
public MyAndroidViewModel(@NonNull Application application) {
super(application);
}
public int number;
}
代码下载