为Android中的微调器向数组适配器添加枚举

为Android中的微调器向数组适配器添加枚举,android,enums,android-widget,Android,Enums,Android Widget,我希望在android上的spinner小部件中使用Enum作为列表。我的枚举设置如下所示: public enum States{ AL("Alabama"), AK("Alaska"), AR("Arkansas"), AZ("Arizona"), CA("California"), CO("Colorado"), ... (etc.) } mAddressState.setAdapter(new ArrayAdapter<States>(this, and

我希望在android上的spinner小部件中使用Enum作为列表。我的枚举设置如下所示:

public enum States{

AL("Alabama"), 
AK("Alaska"), 
AR("Arkansas"), 
AZ("Arizona"), 
CA("California"), 
CO("Colorado"),
    ... (etc.)
}
mAddressState.setAdapter(new ArrayAdapter<States>(this, android.R.layout.simple_list_item_1, States.values()));
我当前的阵列适配器设置如下:

public enum States{

AL("Alabama"), 
AK("Alaska"), 
AR("Arkansas"), 
AZ("Arizona"), 
CA("California"), 
CO("Colorado"),
    ... (etc.)
}
mAddressState.setAdapter(new ArrayAdapter<States>(this, android.R.layout.simple_list_item_1, States.values()));
mAddressState.setAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,States.values());

这几乎是可行的,但在我的微调器列表中,我最终得到的是缩写,而不是州名(这就是我想要的)。是否有一种解决方法可以正确地进行此设置?

添加一个枚举构造函数,如下所示。。。然后用States.fullName()替换States.values()


也许您可以尝试重写toString()函数,如下所示。我还没有试过,但我正要试。

我希望这能帮助别人。我花了一段时间才自己弄明白。诀窍是覆盖枚举中的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;
  }
}
然后,按如下步骤创建适配器:

   mAddressState.setAdapter(new ArrayAdapter<States>(this,
      android.R.layout.simple_list_item_1, States.values()));

让我们试着通过一个例子来提供答案

public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } 
考虑上面的枚举。现在,您可以通过以下方式将其添加到适配器:

方法1:

ArrayAdapter<Day> adapter = new ArrayAdapter<Day>(activity, android.R.layout.simple_spinner_dropdown_item, Day.values());
ArrayAdapter=newArrayAdapter(活动,android.R.layout.simple\u微调器\u下拉菜单\u项,Day.values());
注意:在高级枚举的情况下,可以重写枚举定义中的toString方法以显示所需的值

方法2:

public static final List<String> daysList = Stream.of(Day.values()).map(Day::name).collect(Collectors.toList());
ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity, android.R.layout.simple_spinner_dropdown_item, daysList);
公共静态最终列表daysList=Stream.of(Day.values()).map(Day::name).collect(Collectors.toList()); ArrayAdapter=新的ArrayAdapter(活动,android.R.layout.simple\u微调器\u下拉菜单\u项,daysList);
以下是如何使用Kotlin和MaterialTextInputLayout进行此操作,它们可以用作微调器的替代品,请首先按照此答案中所述的方式执行此操作:

首先按如下方式定义枚举:

enum class States(val label: String) {
    AL("Alabama"), 
    AK("Alaska"), 
    AR("Arkansas"), 
    AZ("Arizona"), 
    CA("California"), 
    CO("Colorado"),;

    override fun toString(): String {
        return label
    }
}
val items = OrderStatusType.values()
val adapter = ArrayAdapter(requireContext(), R.layout.spinner_item_tv, items)
autoCompleteTextView.setAdapter(adapter)
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/spinner_item_tv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:text="@tools:sample/cities" />
val selectedState = States.values().firstOrNull { it.label == autoCompleteTextView.text.toString() } 
// could be null if nothing is selected
然后按如下方式设置适配器:

enum class States(val label: String) {
    AL("Alabama"), 
    AK("Alaska"), 
    AR("Arkansas"), 
    AZ("Arizona"), 
    CA("California"), 
    CO("Colorado"),;

    override fun toString(): String {
        return label
    }
}
val items = OrderStatusType.values()
val adapter = ArrayAdapter(requireContext(), R.layout.spinner_item_tv, items)
autoCompleteTextView.setAdapter(adapter)
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/spinner_item_tv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:text="@tools:sample/cities" />
val selectedState = States.values().firstOrNull { it.label == autoCompleteTextView.text.toString() } 
// could be null if nothing is selected
微调器项目电视可以是任何文本视图,如下所示:

enum class States(val label: String) {
    AL("Alabama"), 
    AK("Alaska"), 
    AR("Arkansas"), 
    AZ("Arizona"), 
    CA("California"), 
    CO("Colorado"),;

    override fun toString(): String {
        return label
    }
}
val items = OrderStatusType.values()
val adapter = ArrayAdapter(requireContext(), R.layout.spinner_item_tv, items)
autoCompleteTextView.setAdapter(adapter)
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/spinner_item_tv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:text="@tools:sample/cities" />
val selectedState = States.values().firstOrNull { it.label == autoCompleteTextView.text.toString() } 
// could be null if nothing is selected
您还可以通过如下方式搜索枚举值:

enum class States(val label: String) {
    AL("Alabama"), 
    AK("Alaska"), 
    AR("Arkansas"), 
    AZ("Arizona"), 
    CA("California"), 
    CO("Colorado"),;

    override fun toString(): String {
        return label
    }
}
val items = OrderStatusType.values()
val adapter = ArrayAdapter(requireContext(), R.layout.spinner_item_tv, items)
autoCompleteTextView.setAdapter(adapter)
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/spinner_item_tv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:text="@tools:sample/cities" />
val selectedState = States.values().firstOrNull { it.label == autoCompleteTextView.text.toString() } 
// could be null if nothing is selected

那没用。我实际上已经在做了,没有具体说明,对不起。阵列适配器似乎不喜欢我尝试这样做。setAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,States.getStateName());我还尝试将阵列适配器类型设置为new ArrayAdapter,但仍然没有执行我所希望的操作。还有其他建议吗?