gpt4 book ai didi

Android - 将 Spinner 配置为使用数组

转载 作者:IT王子 更新时间:2023-10-28 23:46:19 26 4
gpt4 key购买 nike

我以以下方式声明我的 Spinner(它非常静态,所以我在 array.xml 中有 2 个字符串数组用于标题和值)

<Spinner
android:id="@+id/searchCriteria"
android:entries="@array/searchBy"
android:entryValues="@array/searchByValues" />

我希望 spinner.getSelectedItem() 返回一个数组 [title, value]但实际上它只返回一个标题字符串。是否无视android:entryValues?我如何从中获得值(value),而不是标题?是这仅适用于 XML 还是我需要创建适配器并执行此操作以编程方式?

最佳答案

为什么不使用已知类型的对象以编程方式填充您的 ArrayAdapter 并使用它,而不是双数组方法。我已经写了一个类似性质的教程(底部的链接)来做到这一点。基本前提是创建一个 Java 对象数组,告诉微调器,然后直接从微调器类中使用这些对象。在我的示例中,我有一个表示“状态”的对象,其定义如下:

package com.katr.spinnerdemo;

public class State {

// Okay, full acknowledgment that public members are not a good idea, however
// this is a Spinner demo not an exercise in java best practices.
public int id = 0;
public String name = "";
public String abbrev = "";

// A simple constructor for populating our member variables for this tutorial.
public State( int _id, String _name, String _abbrev )
{
id = _id;
name = _name;
abbrev = _abbrev;
}

// The toString method is extremely important to making this class work with a Spinner
// (or ListView) object because this is the method called when it is trying to represent
// this object within the control. If you do not have a toString() method, you WILL
// get an exception.
public String toString()
{
return( name + " (" + abbrev + ")" );
}
}

然后您可以使用这些类的数组填充微调器,如下所示:

       // Step 1: Locate our spinner control and save it to the class for convenience
// You could get it every time, I'm just being lazy... :-)
spinner = (Spinner)this.findViewById(R.id.Spinner01);

// Step 2: Create and fill an ArrayAdapter with a bunch of "State" objects
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this,
android.R.layout.simple_spinner_item, new State[] {
new State( 1, "Minnesota", "MN" ),
new State( 99, "Wisconsin", "WI" ),
new State( 53, "Utah", "UT" ),
new State( 153, "Texas", "TX" )
});

// Step 3: Tell the spinner about our adapter
spinner.setAdapter(spinnerArrayAdapter);

您可以按如下方式检索所选项目:

State st = (State)spinner.getSelectedItem();

现在您可以使用真正的 Java 类了。如果要在微调器值发生变化时进行拦截,只需实现 OnItemSelectedListener 并添加适当的方法来处理事件。

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
{
// Get the currently selected State object from the spinner
State st = (State)spinner.getSelectedItem();

// Now do something with it.
}

public void onNothingSelected(AdapterView<?> parent )
{
}

您可以在此处找到整个教程: http://www.katr.com/article_android_spinner01.php

关于Android - 将 Spinner 配置为使用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1587028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com