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

时间:2017-01-06 10:19:18

标签: android android-studio

如果用户想要从当前时间选择上一个日期和时间,我想禁用对话框片段中的“确定”按钮。 这是图书馆https://github.com/jjobes/SlideDateTimePicker 我通过设置最短日期在我的项目中使用我能够阻止用户选择以前的日期,但没有找到适合的时间。

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

    }
}

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

5 个答案:

答案 0 :(得分:1)

你必须编辑图书馆

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

 @Override
    public void onTimeChanged(int hour, int minute)
    {
        mCalendar.set(Calendar.HOUR_OF_DAY, hour);
        mCalendar.set(Calendar.MINUTE, minute);

        updateTimeTab();
  if(Your validations==true){
        mOkButton.setEnabled(true);
        }
        else{
        mOkButton.setEnabled(false);
        }
    }

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

dependencies {
    compile project(':slideDateTimePicker')
}

因此,转到这个库项目文件,编辑以下文件SlideDateTimeDialogFragment,在其中你会找到mOKButton代码,编辑如下:

enter image description here

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

只需使用日期选择器,无法选择此前的日期:

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