[英]How do I get a list from my ViewModel to display in my spinner and be selectable?
目前,我的微调器可以获取讲师列表并准确地显示在微调器下拉菜单中,但微调器没有默认值,即使在下拉菜单中选择了一个值,它也保持空白。 尝试获取 onItemSelected 中的值表明选择下拉列表中的任何值仍返回 null。 令我困惑的是,我的自定义适配器可以清楚地看到列表已正确保存在 ViewModel 之外,否则微调器下拉菜单根本不会显示正确的值,但适配器声明下方的 println 始终返回大小列表为 0。
我试过的修复~
更改了微调器的大小及其内容
更改了文本的颜色
创建了一个自定义 spinner_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:gravity="start"
android:textColor="#000000"
android:padding="10dp"
/>
termViewModel = new ViewModelProvider(this).get(TermViewModel.class);
List<Entities.Instructor> allInstructor = new ArrayList<>();
termViewModel.getAllInstructor().observe(getViewLifecycleOwner(), instructors ->{
allInstructor.addAll(instructors);
System.out.println("allInstructor size in the termViewModel is: " + allInstructor.size());
});
ArrayAdapter<Entities.Instructor> adapter = new ArrayAdapter<>(getActivity(), R.layout.spinner_item,
allInstructor);
System.out.println("outside of termViewModel: " + allInstructor.size());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
instructorSpinner.setAdapter(adapter);
adapter.notifyDataSetChanged();
instructorSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
spinnerText = instructorSpinner.getSelectedItem().toString();
System.out.println(spinnerText);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
已解决我已经在 termViewModel.getAllInstructor() 之后的 {} 之间移动了所有与微调器和适配器相关的代码,现在它可以工作了,但我发誓它应该让我从我的 ViewModel 复制一个列表并将其分配给我的列表onCreateView() 方法。 如果我遗漏了一些明显的东西,请指出😅
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.