ViewPager中显示相同内容的片段

时间:2020-07-25 09:43:30

标签: android android-fragments data-binding android-viewpager dagger-2

我已经考虑了好几天,我需要帮助。我在viewpager中有2个片段。尽管向它们提供了不同的数据,但它们都显示相同的值。

Link to image 片段A具有与片段B相同的国家/地区的下拉菜单。片段A应该在选择国家/地区后显示医院列表,片段B应该根据所选国家/地区显示学校列表。

问题 当我在片段A中选择一个国家时,我得到了片段A中的医院列表。当我滑动到片段B时,我发现了应该在A中显示的医院列表。当我在B中选择一个国家/地区时,列表会刷新,并且会按原样获得学校列表,但是当我再次向后滑动以查看片段A时,我会找到相同的学校列表,而不是先前选择的医院列表。我正在将dagger2与数据绑定一起使用。

下面的代码描述了一种情况,但是它们基本上是相同的,只是适配器不同,布局也不同。

代码

private void initRecyclerview() {
    binding.rvSchools.setHasFixedSize(true);
    adapter = new SchoolsAdapter(getContext());
    binding.rvSchools.setLayoutManager(new LinearLayoutManager(getContext()));
    binding.rvSchools.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}

private void countries() {
    viewModel.getCountries().removeObservers(getViewLifecycleOwner());
    viewModel.getCountries().observe(getViewLifecycleOwner(), new Observer<Resource<List<Countries>>>() {
        @Override
        public void onChanged(Resource<List<Countries>> countriesList) {
                switch (countriesList.status) {
                    case SUCCESS: 
                        ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(getApplicationContext,
                                R.layout.simple_spinner_item, countriesList);
                        spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        binding.spinner.setAdapter(spinnerAdapter);
                        spinnerAdapter.notifyDataSetChanged();
                        break;
            }
        }
    });

    binding.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String country = countriesList.get(position);

            schools(country);

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {}
    });
}

private void schools(String country) {
    viewModel.getSchoolsHospitals(country, "School").removeObservers(getViewLifecycleOwner());
   viewModel.getSchoolsHospitals(country, "School").observe(getViewLifecycleOwner(), new Observer<Resource<List<SchoolsHospitals>>>() {
        @Override
        public void onChanged(Resource<List<SchoolsHospitals>> schoolsList) {
                switch (schoolsList.status) {
                    case SUCCESS: 
                        binding.setSchools(schoolsList.data);
            }
        }
    });
}

1 个答案:

答案 0 :(得分:0)

考虑到我想如何重用代码,这是一个相当奇怪的行为。我使用了相同的viewModel类,因为数据相同。在为学校创建单独的viewModel类(即,重复的ViewModel只是类名不同)之后,根据需要设置了相应的内容。

如果有更好的方法,将不胜感激。