Как обновить TextView на ButtonClick с помощью значений Spinner (s) - PullRequest
1 голос
/ 14 июня 2010

Я пытаюсь заполнить TextView, основываясь на текущих выбранных параметрах в 3 Spinner (s), но не могу понять, как извлечь выбранные значения из Spinner для вызова функции обновления Вот мой текущий код (довольно грязный, но я только изучаю Java :)),

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");
}

}

Любая помощь с этим была бы великолепна.

ТИА

Ответы [ 2 ]

1 голос
/ 15 июня 2010

вероятно, этот код помогает (вы используете либо position, либо 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) { }              

};
0 голосов
/ 15 июня 2010

Текущее значение счетчика можно получить с помощью 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();
      ....
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...