如何动态改变Spinner的选项

5

我有两个下拉菜单,一个是国家,一个是城市。 我希望在选择国家后动态更改城市的选项。 我知道如何创建和初始化国家的值,但不知道如何设置和更改城市的值。

非常感谢您的指导。

更新1 问题是,我不知道如何更新城市下拉菜单的内容。我知道监听器和其他基础知识,但仅限于创建固定的下拉菜单。


我在考虑使用Spinner.getAdapter(),然后使用clear()方法删除现有项目,再使用add()方法添加新项目。但不幸的是,我找不到这两个方法。这对我来说看起来很奇怪,因为我正在使用ArrayAdapter。它应该有add()和clear()方法 -> http://developer.android.com/reference/android/widget/ArrayAdapter.html#add%28T%29 - eros
2个回答

6

对于第二个Spinner,使用一个适配器来覆盖一个List<String>(或者您的城市表示方式是什么)。在更改列表内容后,调用适配器上的notifyDataSetChanged,这就可以了。


1
@eros: 当然,adapter.notifyDataSetChanged(); - K-ballo
通知已附加的视图底层数据已更改,应刷新自身。 <- 1)它会自动刷新吗?2)我需要将适配器声明为Activity实例变量吗? - eros
我将我的城市适配器声明为Activity的实例变量。然后使用clear()和add()方法。之后,调用adapter.notifyDataSetChanged()。如果您有更好的方法,请在此分享。 - eros

3
你需要获取一个编程引用到这个下拉菜单,类似于这样:
     Spinner spinner = (Spinner) findViewById(R.id.spinner);
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.planets_array, android.R.layout.simple_spinner_item);
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     spinner.setAdapter(adapter);

然后要更新您城市的值,请使用OnItemSelectedListener,像这样:
public class MyOnItemSelectedListener implements OnItemSelectedListener {

   public void onItemSelected(AdapterView<?> parent,
      View view, int pos, long id) {
          //update content of your city spinner using the value at index,
          // id, or the view of the selected country. 
      }
   }

   public void onNothingSelected(AdapterView parent) {
   // Do nothing.
   }

最后,你需要将监听器绑定到国家下拉菜单,像这样:

    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());

参考此处:http://developer.android.com/resources/tutorials/views/hello-spinner.html

3
你能分享一下如何更新你城市旋转器的内容吗? - eros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接