22

我敢肯定这被问了很多,我在这里发现了一些类似的问题,但没有一个真正让我失望。我希望有人可以帮助我。

我想要做的是向用户展示一个下拉列表(微调器),其中包含香草、巧克力、草莓口味的列表。

当用户选择他们选择的风味时,我希望返回草莓的值为 10。

Strawberry = 10
Chocolate = 20
Vanilla = 30

我来自 vb.net 背景,所以发现这非常难以处理,因为我需要阵列适配器和其他东西才能做到这一点?

任何人都可以为我简化事情并分享一些代码吗?

4

5 回答 5

15

你可以试试这个

ArrayAdapter<String> SpinerAdapter;
         String[] arrayItems = {"Strawberry","Chocolate","Vanilla"};
         final int[] actualValues={10,20,30}; 

        SpinerAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_dropdown_item, arrayItems);
        spinner.setAdapter(SpinerAdapter);

        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                int thePrice=actualValues[ arg2];

            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
于 2012-07-05T11:50:33.807 回答
11

我认为这篇文章会对您有所帮助Android:如何将微调器绑定到自定义对象列表?

这个问题作者和你有同样的要求

于 2012-07-05T11:54:32.980 回答
3

您可以实例化使用您的数据对象类型键入的 ArrayAdapter。然后 Spinner 将保存您的完整数据对象而不是字符串。显示的值将由数据对象的 toString() 方法确定。

例子:

List<Project> allProjects = ...;

    ArrayAdapter<Project> spinnerAdapter = new ArrayAdapter<Project>(this, android.R.layout.simple_spinner_item,allProjects.toArray(new Project[allProjects.size()]));
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(spinnerAdapter);
    spinner.setOnItemSelectedListener(this);

...

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    Log.i(AppConst.TAG, "ItemSelected:" + position + " id: " + id);
    Project selectedProject = (Project)getSpinner().getSelectedItem();
    currentTask = selectedProject.toString();
    Log.i(AppConst.TAG, "Selected Project:" + selectedProject.getId());
    ...
}
于 2017-09-24T12:18:27.560 回答
2

这是代码:

        TextView textView=(TextView) findViewById(R.id.textView1);
        Spinner spinner=(Spinner) findViewById(R.id.spinner1);
        spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item,quantity));
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                if(arg2==0){
                textView.setText("Strawberry = 10");
            }else if(arg2==1){
                textView.setText("Chocolate = 20");
            }else if(arg2==2){
                textView.setText("Vanilla = 30");
            }

            }

            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });

String[] quantity={"Strawberry","Chocolate","Vanilla"};

和 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />

</LinearLayout>
于 2012-07-05T11:50:41.147 回答
-1

使用 Enums 将所有内容整齐地包装起来。

使用 Enums 可以保持整洁,并为您提供面向对象的接口,而无需保留数据。从外观上看,您为每种“口味”(例如Strawberry = 10)使用了常量值。

因此,首先创建一个名为enums. 我们会把你Enums的一切都留在那里。

然后在那里创建一个新文件,名为Flavour

枚举/Flavour.java

public enum Flavour {

    STRAWBERRY("Strawberry", 10),
    CHOCOLATE("Chocolate", 20),
    VANILLA("Vanilla", 30);

    private String displayString;
    private int value;

    private Flavour ( String displayString, int value) {
        this.displayString = displayString;
        this.value   = value;
    }

    @Override
    public String toString() {
        return displayString;
    }

    public String displayString() { return displayString; }

    public String value() { return value; }

    public static Flavour fromDisplayString( String displayString) {

        if ( displayString != null ) {
            for ( Flavour flavour : Flavour.values() ) {
                if ( displayString.equalsIgnoreCase( flavour.displayString ) ) {
                    return flavour;
                }
            }
        }

        throw new IllegalArgumentException("No Flavour with display string " + displayString + " found");

    }

    public static Flavour fromValue( int value) {
        if (value != null) {
            for (Flavour flavour : Flavour.values()) {
                if (value.equals(flavour.value)) {
                    return flavour;
                }
            }
        }

        throw new IllegalArgumentException("No Flavour with value " + value + " found");
    }

}

我将剩下的适配器工作留给你做,但关键是:

  • 用于Flavour.values()获取 Spinner Adapter 的 Flavors 数组。

  • toString()在 Spinner 填充时自动调用,因此您的显示字符串(或您在该方法中返回的任何内容)将是显示的内容。

  • 保存值时,您可以使用:

    ( (Flavour) spinner.getSelectedItem() ).value();
    
于 2016-05-17T03:54:19.673 回答