2012-07-15 6 views
2

Я создаю приложение для Android, которое спрашивает у пользователя свой день рождения и месяц рождения. Я пользуюсь двумя прядильщиками (один для месяца и один для дней месяца). Я хочу, чтобы счетчик менялся в зависимости от месяца, , например, февраль имеет 29 дней, поэтому я хочу, чтобы число оборотов на секундомере остановилось на номер 29. Но я хочу, чтобы число оборотов в день увеличилось до 31, если выбирается месяц с 31 днем.Android Spinner добавить/удалить записи

Каков наилучший способ для этого? Я знаю, что могу использовать DatePicker, но я никогда не использовал его раньше, и мне нужен только месяц и день (а не год).

debugText - это только текстовое изображение, которое я создал, чтобы проверить свой счетчик и убедиться, что моя кодировка была права до сих пор.

// Код

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.form); 

    // Month 

    monthSpinner = (Spinner) findViewById(R.id.spinner1); 
    ArrayAdapter<CharSequence> monthAdapter = ArrayAdapter 
      .createFromResource(this, R.array.month, 
        android.R.layout.simple_spinner_item); 
    monthAdapter 
      .setDropDownViewResource(android.R.layout.simple_spinner_item); 
    monthSpinner.setAdapter(monthAdapter); 

    monthName = "January"; 

    // Day 

    daySpinner = (Spinner) findViewById(R.id.spinner2); 
    final ArrayAdapter<CharSequence> dayAdapter = ArrayAdapter 
      .createFromResource(this, R.array.day, 
        android.R.layout.simple_spinner_item); 
    dayAdapter 
      .setDropDownViewResource(android.R.layout.simple_spinner_item); 
    daySpinner.setAdapter(dayAdapter); 

    debugText = (TextView) findViewById(R.id.debugText); 
    debugText.setText("Jaunary"); 

    daySpinner = (Spinner) findViewById(R.id.spinner2); 

    monthSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 

      int monthPos = monthSpinner.getSelectedItemPosition(); 
      switch (monthPos) { 
      case 0: 
       debugText.setText("January"); 

       break; 
      case 1: 

       debugText.setText("February"); 

       break; 
      case 2: 
       debugText.setText("March"); 

       break; 
      case 3: 
       debugText.setText("April"); 

       break; 
      case 4: 
       debugText.setText("May"); 

       break; 

      case 5: 
       debugText.setText("June"); 

       break; 
      case 6: 

       debugText.setText("July"); 

       break; 
      case 7: 
       debugText.setText("August"); 

       break; 
      case 8: 
       debugText.setText("September"); 

       break; 
      case 9: 
       debugText.setText("October"); 

       break; 

      case 10: 
       debugText.setText("November"); 

       break; 
      case 11: 
       debugText.setText("December"); 

       break; 
      } 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 

} 

ответ

1

Действительно DatePicker это самый простой способ сделать это, как бы вы еще объяснить скачку год, чтобы показать дополнительный день на февраль? Но если вы настаиваете на блесны, вот как я бы это сделать:

  1. Когда представление впервые было показано, отключить daySpinner, и заполнить monthSpinner и установить выбор ни к чему.
  2. В прослушивателе OnStlected monthSpinner, после того как он изменен на месяц, включите daySpinner и в соответствии с выбранным месяцем, запишите daySpinner с помощью правильного ArrayAdapter дней (например, у вас будет 4 массива с 1 по 28, 1 до 29, от 1 до 30, от 1 до 31) и установите адаптер на daySpinner.
  3. Когда пользователь меняет выбор monthSpinner, вам нужно снова восстановить DaySpinner.

Наконец, когда нажата кнопка «ОК», просто выберите месяц и день из прядильщиков.

+0

Спасибо, вот что я делаю сейчас. – Steven

+0

Ой, а также я попытался использовать DatePicker, есть ли способ изменить его размер? – Steven

+0

Я смотрел чертежи Date или TimePicker, и они в значительной степени предназначены для заполнения всего экрана. Google изменил ширину расширений -, + и editbox, так что, если они расположены горизонтально, они почти заполнят ширину экрана. – azgolfer