Там ColorViewModel с Связкой , это для восстановления данных:
public class ColorViewModel extends ViewModel {
private static final String STATE_NUMBERS = "numbers";
ArrayList<Integer> numbers;
ColorViewModel(Bundle state) {
if (state == null) {
numbers = buildItems();
}
else {
numbers = state.getIntegerArrayList(STATE_NUMBERS);
}
}
void onSaveInstanceState(Bundle state) {
state.putIntegerArrayList(STATE_NUMBERS, numbers);
}
void refresh() {
numbers = buildItems();
}
private ArrayList<Integer> buildItems() {
Random random = new Random();
ArrayList<Integer> result = new ArrayList<>(25);
for (int i = 0; i < 25; i++) {
result.add(random.nextInt());
}
return result;
}
}
И я называю это ColorViewModel в MainActivity . Я пытался с SavedStateHandle (он прокомментирован выше vm), но не существует метода onSaveInstanceState, такого как Bundle, который сохранял бы данные, когда активность уничтожена.
public class MainActivity extends AppCompatActivity {
ColorViewAdapter adapter;
ColorViewModel vm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar tb = findViewById(R.id.toolbar);
setSupportActionBar(tb);
RecyclerView items = findViewById(R.id.items);
adapter = new ColorViewAdapter(getLayoutInflater());
//final ViewModelProvider.Factory vmFactory = new SavedStateViewModelFactory(getApplication(), this);
vm = new ViewModelProvider(this).get(ColorViewModel.class);
adapter.submitList(vm.numbers);
items.setLayoutManager(new LinearLayoutManager(this));
items.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
items.setAdapter(adapter);
}
Затем при запуске приложения отображается следующее: ![enter image description here](https://i.stack.imgur.com/5bnKe.png)
![enter image description here](https://i.stack.imgur.com/xh8lf.png)
Журнал включает в себя следующее:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mycompany.twoactivities, PID: 6685
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.twoactivities/com.mycompany.twoactivities.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.mycompany.twoactivities.ColorViewModel
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.RuntimeException: Cannot create an instance of class com.mycompany.twoactivities.ColorViewModel
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221)
at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at com.mycompany.twoactivities.MainActivity.onCreate(MainActivity.java:35)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.InstantiationException: java.lang.Class<com.mycompany.twoactivities.ColorViewModel> has no zero argument constructor
at java.lang.Class.newInstance(Native Method)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219)
at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at com.mycompany.twoactivities.MainActivity.onCreate(MainActivity.java:35)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)