我的项目中最初有 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 值不会更改。我怎样才能实现以下目标?
最佳答案
发生这种情况是因为您在 onItemSelected
内部重新分配适配器时更改了对适配器数组 items_subscription
的引用,现在您的 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();
}
关于java - Spinner如何更改数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61238965/