java - Spinner如何更改数据

标签 java android

我的项目中最初有 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/

相关文章:

java - 来自一对多关系的实体仅在应用程序重启后可见(JPA 和 PostgreSQL)

java - 在设置 javax.net.ssl.trustStore 之前加载的默认信任库

android - 自动后台通知firebase数据库

android - 在 EditText 中输入文本时 ActionBar 展开

java - 分解JavaPairRDD对象

java - Spring 安全 : Not acknowledging cookie set in RestTemplate

java - 在 RabbitMQ 监听器中隐藏运行时异常

Android 支持库 23.2 - 抽屉导航和/或工具栏

android - 将flutter项目发布到Play商店后Firebase Auth登录不起作用

java - 检查用户是否通过密码验证或使用某些提供商