2010-01-25 67 views
3

我有一個微調器'光圈'設置了一個數字列表,以及一個微調'模式'有兩個選項。當按下按鈕時,我需要使用各種輸入來運行計算,包括從「光圈」中選擇的當前選擇和從「模式」中導出的值。我如何調用微調器的值,以便在計算中使用它?調用微調器的值?另外,根據微調器的值使用其他值

另外,如何在計算中使用微調器的模式選擇來設置這個其他值之前?更具體地說,如果微調器設置爲小,那麼我在計算中使用的值是0.015,而如果選擇大,我需要使用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); 
} 
} 

這不是實際的方程式,它只是一個測試,以確保一切連接正確。我怎麼會叫微調的價值「孔眼」和小/大旋「模式」

回答

4

爲了得到微調調用以下適當的一個值:

Object item = spinner.getSelectedItem(); 

long id = spinner.getSelectedItemId(); 

int position = getSelectedItemPosition(); 

View selectedView = getSelectedView(); 

在你的情況,你可以聲明微調最終的,所選擇的項目進入到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中是如何工作的。

+0

感謝您的答覆。我對Java很陌生,所以我很抱歉。我相信Object item = spinner.getSelectedItem();是正確的,但我如何提出這個問題呢?當我嘗試從計算內部調用它時,Eclipse說它無法解析'光圈'。它工作正常,如果我把代碼放在計算之外,但在計算內部它不能解析對象名稱(在你的例子「item」中) – Sean 2010-01-25 03:36:02

+0

感謝您的更新。 Eclipse沒有顯示任何錯誤,但是當我有「Object item = aperture.getSelectedItem();」 (在你的例子中,微調器被命名爲光圈,不適用於Spinner),當我點擊按鈕時,它會導致應用程序崩潰。什麼可能導致這個? 對不起,所有的問題。我知道我應該首先學習java,而不是像這樣頭部跳躍,但是這個週末我需要這個應用來拍攝電影。毋庸置疑,我將很快收到一些Java書籍:) – Sean 2010-01-25 04:14:09

+0

有什麼例外? – 2010-01-25 10:30:45

0

如果R.array.apertures是一個字符串數組,那麼你可以使用

Object item = spinner.getSelectedItem(); 

if(item != null) { 

String SelectedString = item.toString(); 

} 

如果它的任何其他對象說的人。

然後

if(item != null) { 

Person SelectedString = (Person) item; 

} 
2

爲什麼不與已知類型的對象編程填補你的ArrayAdapter和使用。我寫了一個類似性質的教程(鏈接在底部)。基本的前提是創建一個Java對象數組,告訴微調者,然後直接從微調器類使用這些對象。在我的例子中,我有一個對象表示一個「狀態」,其定義如下:

package 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(); 

現在你有一個bonafied 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