setOnClickListener в Android для двух текстовых представлений

#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 не покажет эту дату