android - 我的微调器适配器没有在调用 notifyDataSetUpdate 更改时更新微调器值

标签 android spinner

这是我的微调器函数,在 Activity 的 OnCreate() 中调用初始化微调器和设置适配器数据

  private void spinnerSetting() {
    DataBaseOperations dataBaseOperations = new DataBaseOperations(this);
    spinner = (Spinner) findViewById(R.id.volt_spinner_);

    categories = dataBaseOperations.getInvertersType();
    // Creating adapter for spinner
     dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories);

    // Drop down layout style - list view with radio writeNfcBt
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            mkvValue = parent.getItemAtPosition(position).toString();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
}

从这段代码中,当我单击按钮时,它会更新我的 List(categories),它向微调器适配器提供数据,然后我调用 notifyDataSetChange() 但它没有微调器值,但我的 List(categories) 已更新并且有新值但微调器显示旧值

List<Inverters> allData = inverter.getData();
DataBaseOperations dataBaseOperations = new DataBaseOperations(AdminPanelActivity.this);
dataBaseOperations.addInvertersNames(allData);
categories.clear();
//dataAdapter.clear();
categories = dataBaseOperations.getInvertersType();
dataAdapter.notifyDataSetChanged();
spinner.setAdapter(dataAdapter);

最佳答案

适配器持有对其构造函数中传递的列表的引用。

categories = dataBaseOperations.getInvertersType();
dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories);

dataBaseOperations.getInvertersType() 每次调用时都会创建一个新的 ArrayList,但 Adapter 不会更改其内部引用。
这就是为什么您在调用 categories = dataBaseOperations.getInvertersType() 后看不到变化的原因,这是一个适配器不知道的新列表。


你应该这样做:

List<Inverters> allData = inverter.getData();
DataBaseOperations dataBaseOperations = new DataBaseOperations(AdminPanelActivity.this);
dataBaseOperations.addInvertersNames(allData);
categories.clear();
categories.addAll(dataBaseOperations.getInvertersType());
dataAdapter.notifyDataSetChanged();

关于android - 我的微调器适配器没有在调用 notifyDataSetUpdate 更改时更新微调器值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37768260/

相关文章:

android - Flutter 无法从 Assets 中加载文本

java - Android根据用户输入创建文件名路径

java - 根据条件从另一个 Spinner 填充 Spinner

android - 从简单的游标适配器填充微调器

android - 如何更改微调器中选择列表的字体颜色?

android - 带有长文本的微调器无法正常工作

java - 更改微调器突出显示和线条颜色

android - 解析复杂json数据时出现 flutter 问题

android - 在 android 中打开键盘时如何在 View 中滚动?

java - list 文件不包含我项目中的正确 Activity