我已经考虑了好几天,我需要帮助。我在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);
}
}
});
}
答案 0 :(得分:0)
考虑到我想如何重用代码,这是一个相当奇怪的行为。我使用了相同的viewModel类,因为数据相同。在为学校创建单独的viewModel类(即,重复的ViewModel只是类名不同)之后,根据需要设置了相应的内容。
如果有更好的方法,将不胜感激。