我敢肯定这被问了很多,我在这里发现了一些类似的问题,但没有一个真正让我失望。我希望有人可以帮助我。
我想要做的是向用户展示一个下拉列表(微调器),其中包含香草、巧克力、草莓口味的列表。
当用户选择他们选择的风味时,我希望返回草莓的值为 10。
Strawberry = 10
Chocolate = 20
Vanilla = 30
我来自 vb.net 背景,所以发现这非常难以处理,因为我需要阵列适配器和其他东西才能做到这一点?
任何人都可以为我简化事情并分享一些代码吗?
我敢肯定这被问了很多,我在这里发现了一些类似的问题,但没有一个真正让我失望。我希望有人可以帮助我。
我想要做的是向用户展示一个下拉列表(微调器),其中包含香草、巧克力、草莓口味的列表。
当用户选择他们选择的风味时,我希望返回草莓的值为 10。
Strawberry = 10
Chocolate = 20
Vanilla = 30
我来自 vb.net 背景,所以发现这非常难以处理,因为我需要阵列适配器和其他东西才能做到这一点?
任何人都可以为我简化事情并分享一些代码吗?
你可以试试这个
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
}
});
我认为这篇文章会对您有所帮助Android:如何将微调器绑定到自定义对象列表?
这个问题作者和你有同样的要求
您可以实例化使用您的数据对象类型键入的 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());
...
}
这是代码:
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>
使用 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();