2016-11-15 3 views
0

Я сделал кнопку, чтобы открыть дату и время, но CheckBox необходимо проверить, чтобы активировать мою кнопку. Без флажка он отлично работает, если чекбокс проверен или снят, он не открывает сборщик дат. Можешь мне сказать почему?Необходимо установить флажок, чтобы кнопка была нажата - ЕСЛИ не работает

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_new); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    pick_date = (Button) findViewById(R.id.pick_date); 
    tv_result = (TextView) findViewById(R.id.tvdate_result); 
    CheckBox fixed_date_flag = (CheckBox) findViewById(R.id.fixed_date); 
    final boolean checked = (fixed_date_flag).isChecked(); 

    if(checked){ 
    pick_date.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View view) 
     { 
      Calendar c = Calendar.getInstance(); 
      year = c.get(Calendar.YEAR); 
      month = c.get(Calendar.MONTH); 
      day = c.get(Calendar.DAY_OF_MONTH); 

      DatePickerDialog datePickerDialog = new DatePickerDialog(NewActivity.this, NewActivity.this, year, month, day); 
      datePickerDialog.show(); 
     } 
    });} 
} 

@Override 
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) 
{ 
    yearFinal = year; 
    monthFinal = month + 1; 
    dayFinal = dayOfMonth; 

    Calendar c = Calendar.getInstance(); 
    hour = c.get(Calendar.HOUR); 
    minute = c.get(Calendar.MINUTE); 

    TimePickerDialog timePickerDialog = new TimePickerDialog(NewActivity.this, NewActivity.this, hour, minute, DateFormat.is24HourFormat(this)); 
    timePickerDialog.show(); 

} 

@Override 
public void onTimeSet(TimePicker view, int hourOfDay, int minute) 
{ 
    hourFinal = hourOfDay; 
    minuteFinal = minute; 
    tv_result.setText(
      "year: " + yearFinal + "\n" + 
        "month: " + monthFinal + "\n" + 
        "day: " + dayFinal + "\n" + 
        "hour: " + hourFinal + "\n" + 
        "minute: " + minuteFinal); 
} 

}

+0

вам нужно установить флажок checkbox для проверки текущего состояния флажка при его изменении. –

+0

вы отлаживали? путем отладки вы можете увидеть значение «checked» –

ответ

0

ваша задача очень проста:

При создании активности, ваш проверяет, если флажок установлен. Если это значение истинно (но это не так), вы добавляете к элементу datePicker прослушиватель кликов. Итак, у сборщика нет слушателя кликов! Это означает, что когда вы «нажимаете» сборщик, он не добавляет слушателя, даже если флажок установлен.

Вы должны переместить если заявление внутри метода OnClick, как это:

Редакцией:

pick_date.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View view) 
    { 
     if((fixed_date_flag).isChecked()){ 
      Calendar c = Calendar.getInstance(); 
      year = c.get(Calendar.YEAR); 
      month = c.get(Calendar.MONTH); 
      day = c.get(Calendar.DAY_OF_MONTH); 

      DatePickerDialog datePickerDialog = new DatePickerDialog(NewActivity.this, NewActivity.this, year, month, day); 
      datePickerDialog.show(); 
     } 
    } 
}); 

Тем не менее, я думаю, это гораздо лучший вариант, чтобы создать отделенный Касс, который реализует интерфейс OnClickListener, поэтому в конструкторе вы можете инициализировать datepicker, instanciated как приватную переменную этого нового класса, а по методу onClick вы вызываете только метод .show() (если флажок установлен, obbiusly)

Надеюсь, что это поможет !

+0

Это все еще не работает, но спасибо. Я попробую сделать прослушиватель, но я не знаю, как –

+0

извините, я забыл обновить контрольную переменную! – kelmi92

+0

Я собираюсь отредактировать ответ с помощью решения. – kelmi92

Смежные вопросы