在Android中为Spinner的Array Adapter添加枚举

Rya*_*ary 14 enums android android-widget

我正在寻找使用枚举在android上的微调器小部件内的列表.我的枚举设置如下:

public enum States{

AL("Alabama"), 
AK("Alaska"), 
AR("Arkansas"), 
AZ("Arizona"), 
CA("California"), 
CO("Colorado"),
    ... (etc.)
}
Run Code Online (Sandbox Code Playgroud)

我当前的数组适配器设置如下:

mAddressState.setAdapter(new ArrayAdapter<States>(this, android.R.layout.simple_list_item_1, States.values()));
Run Code Online (Sandbox Code Playgroud)

这几乎可以工作,但在我的微调器列表中,我最终得到的是缩写,而不是州名(这就是我想要的).有没有解决方法来正确设置此设置?

小智 35

我希望这有助于某人.我花了一段时间才弄清楚自己.诀窍是在你的枚举中覆盖toString.你的州枚举的代码是:

public enum States{
  AL("Alabama"), 
  AK("Alaska"), 
  AR("Arkansas"), 
  AZ("Arizona"), 
  CA("California"), 
  CO("Colorado"),
    ... (etc.);

  private String theState;

  States(String aState) {
    theState = aState;
  }

  @Override public String toString() {
    return theState;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,像您一样创建适配器:

   mAddressState.setAdapter(new ArrayAdapter<States>(this,
      android.R.layout.simple_list_item_1, States.values()));
Run Code Online (Sandbox Code Playgroud)

长名字将出现在微调器中.要从适配器获取缩写名称,例如存储所选的名称,请使用enum.name()函数.例如:

Spinner spinner = (Spinner) myView.findViewById(R.id.theState);
String selected = ((States)spinner.getSelectedItem()).name();
Run Code Online (Sandbox Code Playgroud)