我有一个微调器'光圈'设置了一个数字列表,一个微调器“模式”有两个选项。当按下按钮时,我需要使用各种输入运行计算,包括来自“光圈”的当前选择和来自“模式”的值。如何调用微调器的值以便在计算中使用它?
另外,如何在计算中使用微调器模式选择之前设置其他值?更具体地说,如果微调器设置为Small,那么我在计算中使用的值是0.015,而如果选择Large,我需要使用0.028
我的其他输入是EditText视图,所以现在我设置如下:
input = (EditText) findViewById(R.id.input1);
input2 = (EditText) findViewById(R.id.input2);
input3 = (EditText) findViewById(R.id.input3);
input4 = (EditText) findViewById(R.id.input4);
output = (TextView) findViewById(R.id.result);
output2 = (TextView) findViewById(R.id.result2);
//aperture dropdown
Spinner s = (Spinner) findViewById(R.id.apt);
ArrayAdapter adapter2 = ArrayAdapter.createFromResource( this, R.array.apertures,
android.R.layout.simple_spinner_item);
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(adapter2);
//button
final Button button = (Button) findViewById(R.id.calculate);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
doCalculation();
}
});
}
private void doCalculation() {
// Get entered input value
String strValue = input.getText().toString();
String strValue2 = input2.getText().toString();
String strValue3 = input3.getText().toString();
String strValue4 = input4.getText().toString();
// Perform a hard-coded calculation
double imperial1 = (Double.parseDouble(strValue3) + (Double.parseDouble(strValue4) / 12));
double number = Integer.parseInt(strValue) * 2;
double number2 = ((number / 20) + 3) / Integer.parseInt(strValue2);
// Update the UI with the result
output.setText("Result: "+ number);
output2.setText("Result2: "+ imperial1);
}
}
这不是实际的等式,它只是一个测试,以确保一切正确连接。我如何调用微调器'光圈'和小/大微调器'模式'的值
答案 0 :(得分:4)
要获取微调器的值,请根据需要调用以下任一项:
Object item = spinner.getSelectedItem();
long id = spinner.getSelectedItemId();
int position = getSelectedItemPosition();
View selectedView = getSelectedView();
在您的情况下,您可以将微调器声明为final,并将所选项目传递到doCalculations()方法,如下所示:
final Spinner aptSpinner = (Spinner) findViewById(R.id.apt);
...
//button
final Button button = (Button) findViewById(R.id.calculate);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
doCalculation(aptSpinner.getSelectedItem());
}
});
}
private void doCalculation(Object selectedItem) {
...
}
您可能会选择一本基本的Java书籍并了解Java的工作范围。
答案 1 :(得分:2)
为什么不以编程方式使用已知类型的对象填充ArrayAdapter并使用它。我写了一个类似性质的教程(链接在底部),这样做。基本前提是创建一个Java对象数组,告诉微调器,然后直接从spinner类中使用这些对象。在我的例子中,我有一个表示“状态”的对象,其定义如下:
包com.katr.spinnerdemo;
公共类州{
// 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
答案 2 :(得分:0)
如果R.array.apertures是一个字符串数组,那么你可以使用
Object item = spinner.getSelectedItem();
if(item != null) {
String SelectedString = item.toString();
}
如果其他任何对象都说人。
然后
if(item != null) {
Person SelectedString = (Person) item;
}