Search code examples
javaandroidonclicklistener

setOnClickListener in Android for Two TextViews


I have a Simple Date Picker App in Android and it's working fine when I click on First TextView. How Can I activate the same Calendar with a second TextView. One TextView shows the Long Date and other shows the Short Date

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();

With a CheckBox, the TextView Shows Long Date and Short Date. I cannot click on the short date to edit the Calendar. How to activate the Calendar in both situation.

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

Solution

  • You can use this type of method and call it where you need .

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

    Example class-

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