Android 如果用户选择上一个日期和时间,如何禁用“确定”按钮?

Android 如果用户选择上一个日期和时间,如何禁用“确定”按钮?,android,android-studio,Android,Android Studio,如果用户想从当前时间中选择上一个日期和时间,我想禁用对话框片段中的OK按钮。 这是图书馆 我在我的项目中通过设置最小日期来使用它,我可以阻止用户选择上一个日期,但没有找到时间的方法 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import android.Manifest; import android.annotation.SuppressLint; import a

如果用户想从当前时间中选择上一个日期和时间,我想禁用对话框片段中的OK按钮。 这是图书馆 我在我的项目中通过设置最小日期来使用它,我可以阻止用户选择上一个日期,但没有找到时间的方法

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import android.Manifest;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import com.github.jjobes.slidedatetimepicker.SlideDateTimeListener;
import com.github.jjobes.slidedatetimepicker.SlideDateTimePicker;

/**
 * Sample test class for SlideDateTimePicker.
 *
 * @author jjobes
 *
 */
@SuppressLint("SimpleDateFormat")
public class MainActivity extends FragmentActivity
{
    private SimpleDateFormat mFormatter = new SimpleDateFormat("MMMM dd yyyy hh:mm aa");
    private Button mButton;

    private SlideDateTimeListener listener = new SlideDateTimeListener() {

        @Override
        public void onDateTimeSet(Date date)
        {
            Toast.makeText(MainActivity.this,
                    mFormatter.format(date), Toast.LENGTH_SHORT).show();
        }

        // Optional cancel listener
        @Override
        public void onDateTimeCancel()
        {
            Toast.makeText(MainActivity.this,
                    "Canceled", Toast.LENGTH_SHORT).show();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mButton = (Button) findViewById(R.id.button);


        mButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v)
            {
                new SlideDateTimePicker.Builder(getSupportFragmentManager())
                        .setListener(listener)
                        .setInitialDate(new Date())
                        .setMinDate(new Date())
                        //.setMaxDate(maxDate)
                        .setIs24HourTime(false)
                        //.setTheme(SlideDateTimePicker.HOLO_DARK)
                        //.setIndicatorColor(Color.parseColor("#990000"))
                        .build()
                        .show();
            }
        });

    }
}

有没有办法做到这一点或建议我,如果没有这样建议我一些链接,我把日期和时间选择器的单一对话框。我签出了大多数解决方案,但没有人为我工作。

以下代码将有助于比较当前日期和所选日期:

@Override
public void onDateTimeSet(Date date) {

    if (date.before(new Date())) {
        // past date
    }else{
        // future or current date
    }
    Toast.makeText(MainActivity.this,
            mFormatter.format(date), Toast.LENGTH_SHORT).show();
}

你必须编辑这个库

1) 通过不使用gradle作为包添加来手动添加库

2) 转到此类
SlideDateTimeDialogFragment.java

3) 查找onDateChanged和onTimeChanged的声明

4) 现在在这些方法中添加验证

 @Override
    public void onDateChanged(int year, int month, int day)
    {
        mCalendar.set(year, month, day);
        updateDateTab();
    if(Your validations==true){
    mOkButton.setEnabled(true);
    }
    else{
    mOkButton.setEnabled(false);
    }
    }


好的,所以我查找了这个库,找到了它,并将它编译到我的项目中,我发现你必须将项目放入你的项目中,然后将以下行添加到gradle中:

dependencies {
    compile project(':slideDateTimePicker')
}
因此,转到此库项目文件,编辑以下文件SlideDateTimeDialogFragment,在其中您将找到mOKButton代码,按如下方式编辑它:


注意:以后不要忘记再次与gradle同步。

只需使用日期选择器,它不能像这样选择以前的日期:

 final Calendar c = Calendar.getInstance();
                        mYear = c.get(Calendar.YEAR);
                        mMonth = c.get(Calendar.MONTH);
                        mDay = c.get(Calendar.DAY_OF_MONTH);




                        DatePickerDialog datePickerDialog = new DatePickerDialog(this,
                                new DatePickerDialog.OnDateSetListener() {

                                        @Override
                                        public void onDateSet(DatePicker view, int year,
                                                              int monthOfYear, int dayOfMonth)
                                        {
                                                dates = dayOfMonth + "-" + (monthOfYear + 1) + "-" + year;
                                                txtDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);

                                        }
                                }, mYear, mMonth, mDay);
                        datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());

                        datePickerDialog.show();
 int mYear,mMonth,mDay;
                final Calendar c = Calendar.getInstance();
                mYear = c.get(Calendar.YEAR);
                mMonth = c.get(Calendar.MONTH);
                mDay = c.get(Calendar.DAY_OF_MONTH);
                DatePickerDialog datePickerDialog=new DatePickerDialog(getContext(), R.style.datepicker,new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                        insertdate.setText(dayOfMonth + "-" + (month + 1) + "-" + year);
                    }
                }, mYear, mMonth, mDay);
                datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
                datePickerDialog.show();

谢谢Anjali,但我可以阻止用户选择我想要的上一个日期。还有什么选项可以阻止上一次吗?这不是他要求的@Anjali,我想你没有明白我的意思。我成功地完成了所有事情。所有这些我都想阻止用户选择过去的时间。因此,请检查当前时间(“new Date()”)是否晚于所选时间。另一方面,mOkButton,Onclick事件只会返回一个“Return”(返回),这意味着单击OK(确定)按钮不会做任何事情,除非选择的时间是在将来。要为验证设置什么?Sir使用当前日期对象进行日期和时间验证或使用当前日期日历对象验证时间和日期不起作用brother只是使用条件if(mCalendar.before(mMinDate)==true),但它对我不起作用什么是mCalendar和mMinDate?这在我尝试完成同样的事情时对我起作用。setMinDate()为您执行此作业此方法不会选择上一个日期,因此用户无法输入当前日期之前的日期。
 int mYear,mMonth,mDay;
                final Calendar c = Calendar.getInstance();
                mYear = c.get(Calendar.YEAR);
                mMonth = c.get(Calendar.MONTH);
                mDay = c.get(Calendar.DAY_OF_MONTH);
                DatePickerDialog datePickerDialog=new DatePickerDialog(getContext(), R.style.datepicker,new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                        insertdate.setText(dayOfMonth + "-" + (month + 1) + "-" + year);
                    }
                }, mYear, mMonth, mDay);
                datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
                datePickerDialog.show();