java - Spinner 如何更改数据
问题描述
我的项目中最初有 2 个微调器。当第一个微调器值更改时,我想更改第二个微调器的数据。这是我尝试过的。
Spinner subscription = findViewById(R.id.spinner_subscription);
items_subscription = new String[]{"Daily"};
ArrayAdapter<String> adapter_subscriptions = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items_subscription);
subscription.setAdapter(adapter_subscriptions);
payment_method.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(position == 0){
items_subscription = new String[]{"Daily"};
}else if(position == 1){
items_subscription = new String[]{"Monthly", "Annually"};
}else if(position == 2){
items_subscription = new String[]{"Monthly", "Annually"};
}else{
items_subscription = new String[]{"Daily"};
}
adapter_subscriptions.notifyDataSetChanged();
subscription.setAdapter(adapter_subscriptions);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
上面的方法不起作用。它只在加载时广告“每日”,当 Spinner1 值发生变化时,spinner2 值不会改变。我怎样才能实现以下目标?
解决方案
items_subscription
发生这种情况是因为您在 inside 重新分配适配器时更改了对适配器数组的引用onItemSelected
,现在您adapter_subscriptions
没有与数组相同的对象,并且您正在修改适配器不知道的数据。最好有一个数组列表,清除它,并在更改时用新数据填充它,然后调用adapter.notifyDataSetChanged()
.
ArrayList<String> items_subscription = new ArrayList<>();
// add your objects to the list and initialize the adapter
// ...
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
items_subscription.clear();
if(position == 0){
items_subscription.add("Daily");
}
// ...etc
adapter_subscriptions.notifyDataSetChanged();
}
推荐阅读
- r - 具有分类和相应字符串变量的收集函数
- integral - 如何使用 JSXGraph 访问积分值?
- python-3.x - 在 MatPlotLib 中使用“for”
- angular - 通过 CLI 以正确的方式更新 Angular 及其依赖项
- twilio - 代理使用 Twilio 查看真实来电号码
- node.js - Node.js 服务:获取“无法获取 /
" 在微服务中的 POST 请求之后(在本地工作) - mysql - 获取需要将一个日期与最近日期进行比较的 AVG B/W 2 TIMESTAMPS
- javascript - 在 JavaScript 中使用伪元素 ::before
- java - onNavigationItemSelected() 问题
- laravel - laravel 数据库更新获取更改列