根据另一个微调器的选定项目更新微调器

updating spinner based on another spinner's selected item

这段代码有什么问题?

我有两个转盘。一个用于 'category',第二个用于 'subcategory'。当在类别微调器中选择一个项目时,我想相应地重新加载相关的子类别。

        mSpnrCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // SubCategories
                String[] aSubCategory = new String[SUBCATS.length];

... Some code for preparing aSubCategory.

                ArrayAdapter<String> dataAdapterSubCategories = new ArrayAdapter<String>(NewRequestActivity.this, android.R.layout.simple_spinner_item, aSubCategory);
                dataAdapterSubCategories.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                mSpnrSubCategory.setAdapter(dataAdapterSubCategories);
            }

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

            }
        });

当加载 activity 时调用此代码,它可以很好地加载第一个类别的子类别。但是,当我手动更改类别时,会调用此代码,但会导致子类别的微调器为空。我不知道为什么。有什么想法吗?

将您的子类别适配器 (mSpnrSubCategory) 定义为全局变量。
然后每当类别微调器单击时,更改子类别的数据然后 notifyDataSetChanged();

    ArrayAdapter<String> mSpnrSubCategory;
    ArrayList<String> aSubCategory;
    mSpnrCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
         @Override
         public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
               // SubCategories
               ...
               mSpnrSubCategory.notifyDataSetChanged();    
         }
    });

我建议使用ArrayList<String> instead of String[]
希望这有帮助