首页 > 解决方案 > 片段 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 集合的片段相邻。

标签: androidandroid-fragments

解决方案


尝试将将适配器分配给微调器的代码移出 updateSpinner 方法,以便您只使用适配器初始化微调器 1 次。在您的类中保留对适配器的引用 - 例如 mSpinnerArrayAdapter

然后,在 updateSpinner 方法中,一旦您更新了适配器的数据,请确保在适配器上调用 mSpinnerArrayAdapter.notifyDataSetChanged()。


推荐阅读