I think the question was for 2 separate buttons to perform a similar function.
Here's how I would do it:
Layout :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.nov.datepickertest.MainActivity"> <TextView android:id="@+id/dateStart" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=""/> <TextView android:id="@+id/dateEnd" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=""/> <ImageButton android:id="@+id/showDateStartPicker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_menu_my_calendar"/> <ImageButton android:id="@+id/showDateEndPicker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_menu_my_calendar"/> </LinearLayout>
Activity :
package com.blah.datepickertest; import android.app.Activity; import android.app.DatePickerDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.Context; import android.content.DialogInterface; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.DatePicker; import android.widget.ImageButton; import android.widget.TextView; import org.w3c.dom.Text; import java.util.Calendar; public class MainActivity extends AppCompatActivity { private TextView mDateDisplayStart; private TextView mDateDisplayEnd; private ImageButton mPickDateStart; private ImageButton mPickDateEnd; private int mYear; private int mMonth; private int mDay; static final int DATE_DIALOG_ID = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDateDisplayStart = (TextView) findViewById(R.id.dateStart); mDateDisplayEnd = (TextView) findViewById(R.id.dateEnd); mPickDateStart = (ImageButton) findViewById(R.id.showDateStartPicker); mPickDateEnd = (ImageButton) findViewById(R.id.showDateEndPicker); final Context context = this; mPickDateStart.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { MyDatePicker dlg = new MyDatePicker(context); dlg.setTextView(mDateDisplayStart); dlg.show(); } }); mPickDateEnd.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { MyDatePicker dlg = new MyDatePicker(context); dlg.setTextView(mDateDisplayEnd); dlg.show(); } }); } private void updateDisplay(TextView tv, Calendar c) { tv.setText(new StringBuilder() .append(c.get(Calendar.MONTH) + 1) .append("-") .append(c.get(Calendar.DAY_OF_MONTH)) .append("-") .append(c.get(Calendar.YEAR))); } private class MyDatePicker extends DatePickerDialog { public MyDatePicker(Context context) { super( context, null, Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); } // Раскомментируй, если нужен такой конструктор // public MyDatePicker(Context context, @Nullable OnDateSetListener listener, int y, int m, int d) { // super(context, listener, y, m, d); // } private final Calendar c = Calendar.getInstance(); private TextView tv = null; @Override public void onDateChanged(DatePicker view, int year, int month, int dayOfMonth) { // По мере изменения даты, обновляем Calendar: c.clear(); c.set(year, month, dayOfMonth); // Если хочешь, чтобы дата менялась по мере ввода раскомментируй //if (tv!=null) updateDisplay(tv, c); } @Override public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE && tv != null) { updateDisplay(tv, c); } super.onClick(dialog, which); } public void setTextView(TextView textView) { tv = textView; } } }
If you uncommented that the date changes as you type, then you don’t need onClick at all. It is in order to update the text when choosing a date.