Search code examples
androidandroid-fragmentstimepickerandroid-timepicker

Time Picker Fragments Differentiation


I have run into a problem where my app is properly building and buttons are working as expect, but the text field I am editing with two time picker fragments is being edited by both the start time picker and end time picker.

public class MainActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button_start = (Button) findViewById(R.id.start_picker_button);
        button_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DialogFragment timePicker1 = new TimePickerStartFragment();
                timePicker1.show(getSupportFragmentManager(),"time picker start");
            }
        });

        Button button_end = (Button) findViewById(R.id.end_picker_button);
        button_end.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DialogFragment timePicker2 = new TimePickerEndFragment();
                timePicker2.show(getSupportFragmentManager(),"time picker end");
            }
        });

    }

    @Override
    public void onTimeSet(TimePicker TimePickerStartFragment, int hourOfDay, int minute) {
        TextView textView = (TextView)findViewById(R.id.textView);
        textView.setText("Hour: " + hourOfDay + " " + "Minute: " + minute);

My application looks like two buttons, one for a start time fragment and the other for an end time fragment. I have two seperate time picker fragment java files. However, when I set the end time fragment it still modifies the start time text. I want to have the start time picker only modify the start time text and the end time picker modify the end time text.

To further clarify when the select start time button is pressed TimePickerStratFragment is opened and a time is selected, this modifies a text field called textView. However when the time end button fragment is selected it also modifies the text view. I want the time end button to not modify the text view.


Solution

  • Add a String value to check which time picker is opened, because onTimeSet is fired for both fragments use something like this

    String timeTag;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button button_start = (Button) findViewById(R.id.start_picker_button);
            button_start.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    timeTag = "from";
                    DialogFragment timePicker1 = new TimePickerStartFragment();
                    timePicker1.show(getSupportFragmentManager(),"time picker start");
                }
            });
    
            Button button_end = (Button) findViewById(R.id.end_picker_button);
            button_end.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    timeTag = "to";
                    DialogFragment timePicker2 = new TimePickerEndFragment();
                    timePicker2.show(getSupportFragmentManager(),"time picker end");
                }
            });
    
        }
    
        @Override
        public void onTimeSet(TimePicker TimePickerStartFragment, int hourOfDay, int minute) {
    
            if(Objects.equals(timeTag, "from")) {
                TextView textView = (TextView)findViewById(R.id.textView);
                textView.setText("Hour: " + hourOfDay + " " + "Minute: " + minute);
            }
    
            if(Objects.equals(timeTag, "to")) {
    
            }
    }