Android开发Spinner控件找不到setText()、getText()方法报错问题咨询
Spinner 报错修复方案
Android 原生 Spinner 组件本身未提供 getText() 和 setText() 方法,你的报错均为 API 调用错误,具体修复如下:
1. 修复 RegisterBook.java 报错
你这里存在两处错误:一是误用 Spinner 不存在的 getText() 方法,二是错误地给 String 类型变量调用了 Spinner 才有的 getSelectedItem() 方法。
修改后代码:
Spinner spinnerCategory_book; spinnerCategory_book = findViewById(R.id.spinnerCategory_book); // 正确获取 Spinner 选中项文本 String category_book = spinnerCategory_book.getSelectedItem().toString(); // 校验是否选中默认提示项 if (category_book.equals("Choose the book category")){ Toast.makeText(RegisterBook.this,"表单字段不能为空",Toast.LENGTH_SHORT).show(); }
2. 修复 BookAdapter.java 报错
Spinner 没有 setText() 方法,要指定选中某一项,需要先找到目标文本对应在选项列表中的索引,再调用 setSelection() 方法选中即可。
修改后代码:
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) { final Book f_book = books.get(position); String targetCategory = f_book.getCategory_book(); // 遍历查找目标分类对应的选项索引 for (int i = 0; i < holder.spinnerCategory_book.getAdapter().getCount(); i++) { if (holder.spinnerCategory_book.getAdapter().getItem(i).toString().equals(targetCategory)) { holder.spinnerCategory_book.setSelection(i); break; } } }
可选优化:禁止选中默认提示项
不需要通过文本对比判断,直接通过选中位置判断更高效,给 Spinner 添加选中监听即可:
spinnerCategory_book.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (position == 0) { Toast.makeText(RegisterBook.this,"请选择书籍分类",Toast.LENGTH_SHORT).show(); // 可在这里补充其他拦截逻辑 } } @Override public void onNothingSelected(AdapterView<?> parent) { } });
内容的提问来源于stack exchange,提问作者Javlo
相关产品推荐
相关产品推荐

