【问题标题】:Framents in viewpager displaying the same contentviewpager 中的片段显示相同的内容
【发布时间】:2020-11-15 02:25:59
【问题描述】:

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

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

问题 当我在 Fragment A 中选择一个国家时,我会在 Fragment A 中获得医院列表。当我滑动到 Fragment 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);
            }
        }
    });
}

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多