android - 片段 OnResume 不更新微调器
问题描述
我有一个带有微调器的片段,但是当我选择选项卡以显示该片段时,它不会更新它包含的微调器。所以我假设它的 onResume 不会触发?
I'm trying to update the spinner whenever the fragment is selected.
片段代码:
public class AddFacultyFragment extends Fragment {
@BindView(R.id.spinner_search_UniFac)
Spinner spinner_search_UniFac;
ArrayList<University> listUni = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_add_faculty,
container,
false);
ButterKnife.bind(this, view);
updateSpinner();
return view;
}
@Override
public void onResume() {
updateSpinner();
super.onResume();
}
private void updateSpinner() {
FirebaseFirestore db = FirebaseFirestore.getInstance();
final CollectionReference[] colRef = {db.collection("university")};
colRef[0].get().addOnCompleteListener((OnCompleteListener<QuerySnapshot>) task -> {
if (task.isSuccessful()) {
listUni.clear();
for(DocumentSnapshot a : task.getResult()){
University u = new University();
u.setID(a.getId());
u.setDesc(a.get("Desc").toString());
listUni.add(u);
}
}
});
ArrayAdapter<University> spinnerArrayAdapter = new ArrayAdapter<>
(getContext(), android.R.layout.simple_spinner_item,
listUni);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout
.simple_spinner_dropdown_item);
spinner_search_UniFac.setAdapter(spinnerArrayAdapter);
}
public AddFacultyFragment() {
// Required empty public constructor
}
}
值得一提的是,此片段与更新微调器从中提取的 firestore 集合的片段相邻。
解决方案
尝试将将适配器分配给微调器的代码移出 updateSpinner 方法,以便您只使用适配器初始化微调器 1 次。在您的类中保留对适配器的引用 - 例如 mSpinnerArrayAdapter
然后,在 updateSpinner 方法中,一旦您更新了适配器的数据,请确保在适配器上调用 mSpinnerArrayAdapter.notifyDataSetChanged()。
推荐阅读
- python - 从文件 A 中取出第一行并插入到文件 B 中的特定行
- r - 如何在r中找到属于至少2组的人的百分比
- google-tag-manager - GTM 点击元素不会在点击时触发
- javascript - 如何创建一个包含 div 数组的数组?
- c++ - 在 QTableView 中编辑单元格时出现 QtVirtualKeyboard 焦点问题
- html - 如何使用按钮调用 jQuery
- latex - LaTeX - 在音乐环境中控制文本宽度
- asp.net - 出现 503 错误时自动重置 IIS
- python - 使用 Pandas 样式格式化 DataFrame 的索引/行
- docker - 来自 Windows 的 Docker 映像针对非 Windows Docker 主机