У меня проблема с использованием LiveData.
Сценарий ...
У меня BottomNavigationView с 4 вкладками. Форум, Сообщение, Пользователи, Аккаунт . Каждый соединяется с фрагментом ViewPager. Каждый фрагмент имеет свою собственную модель представления, модель и репозиторий. Я загружаю данные из базы данных в RecyclerView Users Fragment. Работает нормально. Но когда я перелистываю viewPager на другую вкладку, мой список пользователей удваивается. Фактически, он загружает только последний наблюдаемый элемент дважды. Например ... если user5 является последним элементом при извлечении, когда я возвращаюсь из другого фрагмента вкладки, в списке есть два user5. Больше раз я меняю свои вкладки, много раз наблюдаю за последним элементом.
Это мой Users_Fragment.class
public class Users_Fragment extends Fragment{
private ArrayList<Users> user_info_list;
private UserFragment_ViewModel userFragment_viewModel ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.user_fragment, container ,false);
userFragment_viewModel = new ViewModelProvider(this).get(UserFragment_ViewModel.class);
user_info_list = new ArrayList<>();
initiate();
fetchUsers();
return mainView;
}
private void initiate(){
// declare RecyclerView and some status checking code
}
private void fetchUsers() {
// fetch user to recyclerview
user_info_list.clear();
recyclerView.setHasFixedSize(true);
LinearLayoutManager layoutManager
= new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
userFragment_viewModel.initiate(); // start retrieving from database with repository and load it
userFragment_viewModel.getPeople_list()
.removeObservers(getViewLifecycleOwner());
userFragment_viewModel.getPeople_list()
.observe(getViewLifecycleOwner(), usermodel -> {
user_info_list.add(usermodel);
userAdapter.notifyDataSetChanged();
});
userAdapter = new UserAdapter(getContext(),user_info_list);
recyclerView.setAdapter(userAdapter);
}
}
А это мой UserFragment_ViewModel.class
public class UserFragment_ViewModel extends ViewModel {
private LiveData<UserModel> people_list_info ;
public void initiate() {
people_list_info = Users.getInstance().getUser_live_data();
}
public LiveData<UserModel> getPeople_list() {
return people_list_info;
}
}
Как это решить? Почему мой последний объект наблюдения снова и снова становится Наблюдаемым при смене вкладки?