#java #android #onclicklistener
Вопрос:
У меня есть простое приложение для выбора даты в Android, и оно отлично работает, когда я нажимаю на Первый TextView. Как я могу активировать один и тот же календарь с помощью второго текстового представления. В одном виде текста показана Длинная дата, а в другом-Короткая дата
public class MainActivity extends AppCompatActivity {
private TextView mDisplayLongDate;
TextView mDisplayShortDate;
CheckBox checkBoxVisibility;
private DatePickerDialog.OnDateSetListener mDateSetListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDisplayLongDate = findViewById(R.id.tvLDate);
mDisplayShortDate = findViewById(R.id.tvSDate);
//View checkBox = findViewById(R.id.checkBox);
checkBoxVisibility = findViewById(R.id.checkBox_visibility);
//boolean isChecked = checkBoxVisibility.isClickable();
boolean isChecked = checkBoxVisibility.isChecked();
updateTextVisibility(isChecked);
checkBoxVisibility.setOnCheckedChangeListener((buttonView, isChecked1) -> {
//Step 05 - Updating UI according to the currently changed state
updateTextVisibility(isChecked1);
});
mDisplayLongDate.setOnClickListener(view -> {
Calendar cal = Calendar.getInstance();
С помощью флажка в текстовом представлении Отображается Длинная дата и Короткая дата.
Я не могу щелкнуть по короткой дате, чтобы отредактировать календарь. Как активировать календарь в обеих ситуациях.
String dateLong = monthStr "/" day "/" year;
String dateShort = monthStr "/" day;
mDisplayLongDate.setText(dateLong);
mDisplayShortDate.setText(dateShort);
};
}
private void updateTextVisibility(boolean isChecked) // When checking the trigger (checkbox)
{
if (isChecked)
{
mDisplayShortDate.setVisibility(View.VISIBLE);
mDisplayLongDate.setVisibility(View.GONE);
}
else
{
mDisplayShortDate.setVisibility(View.GONE);
mDisplayLongDate.setVisibility(View.VISIBLE);
}
Комментарии:
1. пробовали ли вы использовать один и тот же экземпляр calendarand DateTimePicker ? просто вызовите его тем же способом, что и первый textview
2. где находится ваш текущий OnClickListener?
3. mDisplayLongDate.setOnClickListener(просмотр -> { Календарь) = Calendar.getInstance();, Он находится в текстовом представлении с длительной датой
Ответ №1:
Вы можете использовать этот тип метода и вызывать его там, где вам нужно .
private void getCal() {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int monthStr = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dPDialog = new DatePickerDialog(MainActivity.this, android.R.style.Theme_Holo_Light_Dialog,
new DatePickerDialog.OnDateSetListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
public void onDateSet(DatePicker datepicker, int selectedY, int selectedM, int selectedD) {
String[] months = new DateFormatSymbols(Locale.ENGLISH).getMonths();
String dateLong = months[selectedM] "/" selectedD "/" selectedY;
String dateShort = months[selectedM] "/" selectedD;
// String dateLong = (selectedM 1) "/" selectedD "/" selectedY;
//String dateShort = (selectedM 1) "/" selectedD;
mDisplayLongDate.setText(dateLong);
mDisplayShortDate.setText(dateShort);
}
}, year, monthStr, day);
dPDialog.show();
}
Пример класса-
public class MainActivity extends AppCompatActivity {
private TextView mDisplayLongDate;
TextView mDisplayShortDate;
CheckBox checkBoxVisibility;
private DatePickerDialog.OnDateSetListener mDateSetListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDisplayLongDate = findViewById(R.id.tvLDate);
mDisplayShortDate = findViewById(R.id.tvSDate);
mDisplayLongDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getCal();
}
});
mDisplayShortDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getCal();
}
});
}
private void getCal() {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int monthStr = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dPDialog = new DatePickerDialog(MainActivity.this, android.R.style.Theme_Holo_Light_Dialog,
new DatePickerDialog.OnDateSetListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
public void onDateSet(DatePicker datepicker, int selectedY, int selectedM, int selectedD) {
String[] months = new DateFormatSymbols(Locale.ENGLISH).getMonths();
String dateLong = months[selectedM] "/" selectedD "/" selectedY;
String dateShort = months[selectedM] "/" selectedD;
// String dateLong = (selectedM 1) "/" selectedD "/" selectedY;
//String dateShort = (selectedM 1) "/" selectedD;
mDisplayLongDate.setText(dateLong);
mDisplayShortDate.setText(dateShort);
}
}, year, monthStr, day);
dPDialog.show();
}
}
Комментарии:
1. Получение предупреждающего сообщения @: «Частное поле «mDateSetListener» никогда не назначается» и «Частный метод» updateTextVisibility(логическое значение) «никогда не используется»
2. Вы можете проигнорировать это или удалить модификатор доступа «частный» из них.
3. Я удалил личное», и все равно сборка не удалась, не уверен, что я что-то пропустил
4. не могли бы вы поделиться logcat
5. Как только я выберу дату из календаря, textview не покажет эту дату