2010-06-14 23 views
1

我想填充一個TextView基於當前選定的3個選項中的選項,但似乎無法弄清楚如何從Spinners中檢索選定的值用來調用更新函數。 這裏是我當前的代碼(相當混亂,但我只是學習Java :)),如何更新ButtonClick上的TextView與Spinner(s)值

public class AgeFun extends Activity { 
private String[] dayNames; 
private String[] yearArray; 
private final static int START_YEAR = 1990; 
private static TextView textDisp; 
private Button calcButton; 
private static Spinner spinnerDay, spinnerYear, spinnerMonth; 
private static ArrayAdapter<?> monthAdapter, dayAdapter, yearAdapter; 
private int year, month, day; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    year = 2000; 
    month = 1; 
    day = 1; 
    textDisp = (TextView) findViewById(R.id.textView1); 
    calcButton = (Button) findViewById(R.id.button); 
    calcButton.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      // Perform action on clicks 
      AgeFun.updateAge(year, month, day); 
     } 
    }); 

    // Month spinner 
    spinnerMonth = (Spinner) findViewById(R.id.spinnerFirst); 
    monthAdapter = ArrayAdapter.createFromResource(
      this, R.array.monthList, android.R.layout.simple_spinner_item); 
    monthAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinnerMonth.setAdapter(monthAdapter); 

    // Day spinner 
    dayNames = new String[31]; 
    for(int i =1; i <= 31; ++i) 
    { 
     dayNames[i-1] = Integer.toString(i); 
    } 
    spinnerDay = (Spinner) findViewById(R.id.spinnerSecond); 
    dayAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, dayNames); 
    spinnerDay.setAdapter(dayAdapter); 

    // Year spinner 
    yearArray = new String[40]; 
    for(int i =0; i < 40; ++i) 
    { 
     yearArray[i] = Integer.toString(START_YEAR+i); 
    } 
    spinnerYear = (Spinner) findViewById(R.id.spinnerThird); 
    yearAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, yearArray); 
    spinnerYear.setAdapter(yearAdapter); 

    updateAge(2000,1,1); 
} 

private static void updateAge(int year, int month, int day) { 
    Date dob = new GregorianCalendar(year, month, day).getTime(); 
    Date currDate = new Date(); 

    long age = (currDate.getTime() - dob.getTime())/(1000 * 60 * 60 * 24)/365; 
    textDisp.setText("Your are " + Long.toString(age) + " years old"); 
} 

}

任何幫助,這將是巨大的。

TIA

回答

0

你可以得到getSelectedItem當前微調值。由於您使用CharSequence填充陣列適配器,所選項目將會是這種類型。

或者,您應該可以使用ArrayAdapter並直接處理整數。我相信微調使用它提供的對象類型的toString方法。

編輯:我錯過了重要的部分,添加onItemSelected監聽到每個紡織家,即:

AdapterView.OnItemSelectedListener listener = new AdapterView.OnItemSelectedListener() { 
     onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      updateAge(); 
     } 
    } 
    dayAdapter.setOnItemSelectedListener(listener); 
    .... 

    private void updateAge() { 
     int day = spinnerDay.getSelectedItem(); 
     .... 
    } 
1

大概是這樣的代碼可以幫助(你使用任何一個位置或ID定位在適配器中的項目)

spnCountries.setOnItemSelectedListener(spnCountriesListener); 


private Spinner.OnItemSelectedListener spnCountriesListener = 

    new Spinner.OnItemSelectedListener() { 

    public void onItemSelected(AdapterView parent, View v, int position, long id) { 

     Log.i("print", parent.getSelectedItem().toString()); 

    } 



    public void onNothingSelected(AdapterView parent) { }    

};