Я вижу, что моя Viewmodel создается каждый раз, когда я меняю ориентацию. Я всегда думал, что ViewModelProviders вернет мне тот же самый экземпляр изменений конфигурации. Я инициализирую свою модель представления в onActivityCreated. Я использую компонент навигации с единой архитектурой деятельности. Где я использую фрагмент nav сайта в своей деятельности. Это мой домашний фрагмент.
public class EmployeeDirectoryFragment extends Fragment implements
EmployeeDirectoryAdapter.ProfilePictureClickListener {
private EmployeeDirectoryViewModel employeeDirectoryViewModel;
private EmployeeDirectoryFragmentBinding employeeDirectoryFragmentBinding;
private EmployeeDirectoryAdapter employeeDirectoryAdapter;
private List<Employee> employees = new ArrayList<>();
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
employeeDirectoryFragmentBinding = DataBindingUtil.inflate(inflater, R.layout.employee_directory_fragment, container, false);
return employeeDirectoryFragmentBinding.getRoot();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
employeeDirectoryViewModel = ViewModelProviders.of(this).get(EmployeeDirectoryViewModel.class);
employeeDirectoryFragmentBinding.directoryView.setLayoutManager(new LinearLayoutManager(getContext()));
employeeDirectoryAdapter = new EmployeeDirectoryAdapter(employees, this);
employeeDirectoryFragmentBinding.directoryView.setAdapter(employeeDirectoryAdapter);
employeeDirectoryFragmentBinding.setEmployeeViewModel(employeeDirectoryViewModel);
employeeDirectoryFragmentBinding.setLifecycleOwner(this);
employeeDirectoryViewModel.getEmployees().observe(this, new Observer<List<Employee>>() {
@Override
public void onChanged(List<Employee> updatedEmployees) {
employees.addAll(updatedEmployees);
employeeDirectoryAdapter.notifyDataSetChanged();
}
});
employeeDirectoryViewModel.hasError().observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean hasError) {
employeeDirectoryFragmentBinding.directoryView.setVisibility(hasError ? View.GONE : View.VISIBLE);
employeeDirectoryFragmentBinding.emptyView.setVisibility(hasError ? View.VISIBLE : View.GONE);
}
});
}
@Override
public void onProfilePictureClick(String url) {
Navigation.findNavController(getView()).navigate(EmployeeDirectoryFragmentDirections.actionEmployeeDirectoryFragmentToProfileFragment2(url));
}
}