Android的 - 配置微调使用数组(Android - configure Spinner to

2019-08-20 05:29发布

我宣布我的微调以下列方式(这是非常静态的,所以我有2个字符串数组array.xml标题和值)

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

我希望spinner.getSelectedItem()返回一个数组[title, value]但事实上它返回只是一个标题字符串。 它忽略android:entryValues ? 我如何得到一个值,而不是从它的标题? 这是可行的与XML仅或者我需要创建适配器和做编程?

Answer 1:

而不是双阵列的方法,为什么不与已知类型的对象编程填补你的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



Answer 2:

所以,如果你来到这里,因为你想在微调标签和价值 - 这里是我做到了:

  1. 您只需建立微调的常用方法
  2. 定义你的array.xml文件2个相同大小的数组。 一个标签,一个值
  3. 与设置您的微调android:entries="@array/labels"
  4. 在你的代码 - 当你需要一个值做这样的事情(不,你不必链的话)

     String selectedVal = getResources().getStringArray(R.array.values)[spinner .getSelectedItemPosition()]; 

  5. 请记住 - 这两个数组必须尽可能相互匹配的时隙数和位置


Answer 3:

中止,中止! 我不知道是什么钻进了我,但Spinner不支持android:entryValues属性。 这一个实际上是从ListPreference这确实(在弹出的对话框中的项目显示列表)类似的事情。 我需要什么,我将不得不(唉)使用SpinnerAdapter



文章来源: Android - configure Spinner to use array