Наследование ViewModel, вероятно, является неподходящим инструментом для этого, поскольку ViewModel предназначен для привязки к жизненному циклу определенного c Фрагмента или Действия. Лучшим подходом было бы иметь истинный класс «Модель», который управляет постоянным состоянием данных (одноэлементным или иным), с которым взаимодействует отдельный ViewModels. Например:
class Database {
private static Database instance = null;
public static synchronized Database getInstance() {
if( instance == null ) {
instance = new Database();
}
return instance;
}
private Database() {}
private int mValue = 0;
public void setValue(int v) { mValue = v; }
public int getValue() { return mValue; }
}
class FragmentAViewModel extends ViewModel {
private final Database db;
FragmentAViewModel() {
db = Database.getInstance();
}
// FragmentA can set and get state on Database as needed
void setValue(int v) {
db.setValue(v);
}
}
class FragmentBViewModel extends ViewModel {
private final Database db;
FragmentBViewModel() {
db = Database.getInstance();
}
// FragmentB can set and get state on Database as needed
int getValue() {
return db.getValue();
}
}
Другой вариант - создать ViewModel уровня активности. Если все фрагменты находятся в пределах одного и того же действия, они могут совместно использовать эту модель представления активности. Например:
mFragmentViewModel = ViewModelProviders.of(this).get(FragmentViewModel.class);
MainActivity a = (MainActivity)requireActivity();
mActivityViewModel = ViewModelProviders.of(a).get(MainActivityViewModel.class);