2017-02-16 52 views
1

下面是我的代碼,可以在單擊edittext後彈出一個按鈕對話框。我的主要問題是限制用戶選擇過去的日期作爲輸入。如何限制用戶在日期選擇器對話框中選擇過去的日期

MainActivity.java

public class MainActivity extends AppCompatActivity { 


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

     final Spinner spinner_from = (Spinner) findViewById(R.id.spinFrom); 
     final Spinner spinner_to = (Spinner) findViewById(R.id.spinTo); 
     Button Searchbtn = (Button) findViewById(R.id.btn_search); 

     Searchbtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String location = spinner_from.getSelectedItem().toString(); 
       String destination = spinner_to.getSelectedItem().toString(); 

      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     //adds icons to the action bar 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     //to handle actions performed by icons on action bar 
     switch (item.getItemId()){ 

      case R.id.admin_button: 
       startActivity(new Intent(this, AdminLogin.class)); 
       return true; 

      case R.id.action_about: 
       startActivity(new Intent(this, AboutBookBus.class)); 
       return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    //to handle the date dialog and set it to the edittext 
    public void onStart(){ 
     super.onStart(); 
     EditText travelDate = (EditText)findViewById(R.id.travelDate); 
     travelDate.setOnClickListener(new View.OnClickListener(){ 

      @Override 
      public void onClick(View view) { 
       DateDialog dialog = new DateDialog(view); 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 
       dialog.show(ft, "DatePicker"); 
      } 


     }); 
    } 
    } 

DateDialog.java

public class DateDialog extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

    EditText travelDate; 
    String Current_date = new SimpleDateFormat("dd/MM/yyyy").format(new Date()); 

    public DateDialog(View view) { 
     travelDate = (EditText) view; 
    } 

    //dialog context to set the date 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 
     return new DatePickerDialog(getActivity(), this, year, month, day); 
    } 

    public void onDateSet(DatePicker view, int year, int month, int day) { 
     String date = year + "-" + (month + 1) + "-" + day; 
     travelDate.setText(date); 


    } 
} 

在activity_main.xml中

<EditText 
     android:layout_width="350dp" 
     android:layout_height="42dp" 
     android:inputType="textPersonName" 
     android:ems="10" 
     android:id="@+id/travelDate" 
     tools:ignore="HardcodedText,TextFields" 
     android:hint="Touch to add travel date" 
     app:layout_constraintLeft_toLeftOf="@+id/textView" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:layout_marginTop="8dp" 
     app:layout_constraintTop_toBottomOf="@+id/textView" 
     app:layout_constraintRight_toRightOf="@+id/textView" 
     app:layout_constraintHorizontal_bias="0.75" /> 

您的反饋和幫助EDITTEXT節將不勝感激。

+0

使用setMinDate和setMaxDate函數來限制日曆視圖。在發佈之前,請谷歌瀏覽相關的SO問題。 – nnn

+0

我爲冗餘道歉,但我嘗試了所有其他相關的線程,但無濟於事。 – Godwin

回答

0

首先選擇當前日期

Calendar c = Calendar.getInstance(); 
Date currentDate= c.getTime(); 

現在比較日期與使用該

Calendar calendar=Calendar.getInstance(); 
    calendar.add(Calendar.DAY_OF_MONTH,-1); 
    dialog.getDatePicker().setMaxDate(calendar.getTime().getTime()); 

選擇的日期

if (selectedDate.after(currentDate)) { 
    // Do something here 
} else { 
    // Print here "Please select date after current date" 
} 
+0

我在'.after'上得到錯誤。什麼是'selectedDate'代表? – Godwin

+0

選擇日期是按當前日期進行比較的日期。 – Bipradip

2

使用DatePicker類的setMinDate方法。

datePicker.setMinDate(System.currentTimeMillis() - 1000);

+0

我把它放在'public void onDateSet'中,但應用程序不斷崩潰 – Godwin

0

這是制約昨日最新最好的方式。

+0

非常感謝 – Godwin

相關問題