首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动关闭DatePickerDialog

自动关闭DatePickerDialog
EN

Stack Overflow用户
提问于 2017-01-02 13:39:27
回答 4查看 688关注 0票数 4

我使用下面的代码从一个DatePickerDialog创建一个EditText

代码语言:javascript
复制
import android.widget.DatePicker;
import android.app.DatePickerDialog;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

Calendar myCalendar = Calendar.getInstance();

String myFormat = "MM/dd/yy";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);

@Override
    protected void onCreate(Bundle savedInstanceState) {

EditText datePicker = (EditText) findViewById(R.id.popUpDate);
datePicker.setText(sdf.format(myCalendar.getTime()));

datePicker.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        new DatePickerDialog(AddAccount.this, R.style.AppTheme_Dialog, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                                  int dayOfMonth) {
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, monthOfYear);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                datePicker.setText(sdf.format(myCalendar.getTime()));
            }
        }, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                myCalendar.get(Calendar.DAY_OF_MONTH)).show();
    }
});
}

是否可以在选定日期后自动关闭默认日期?或者这需要对datepicker小部件进行完整的重拍吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-10 09:02:13

创建一个MyPicker类:)

代码语言:javascript
复制
    import static yourPackageName.MainActivity.sdf; // get static imports


    public class MyPicker extends DatePickerDialog {

    Context context;
    @Override
    public DatePicker getDatePicker() {
        return super.getDatePicker();
    }


    public MyPicker(Context context, int themeResId, OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth) {
        super(context, themeResId, listener, year, monthOfYear, dayOfMonth);
        this.context = context;
    }

    @Override
    public void onDateChanged(DatePicker view, int year, int month, int dayOfMonth) {
        myCalendar.set(Calendar.YEAR, year);
        myCalendar.set(Calendar.MONTH, month);
        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        datePicker.setText(sdf.format(myCalendar.getTime()));
        datePickerDialog.dismiss();
    }
}

现在假设您在MainActivity中的主类

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {


    public static Calendar myCalendar = Calendar.getInstance();


    public static String myFormat = "MM/dd/yy";
    public static SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
    public static EditText datePicker;
    public static MyPicker datePickerDialog;

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

        datePicker = (EditText) findViewById(R.id.popUpDate);
        datePicker.setText(sdf.format(myCalendar.getTime()));

        datePicker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                datePickerDialog = new MyPicker(MainActivity.this, R.style.AppTheme_Dialog, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                    }
                }, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
                datePickerDialog.show();
            }

        });
    }

}
}

或者如果您不需要应用样式

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

    public  String myFormat = "MM/dd/yy";
    public  SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
    public  EditText datePicker;
    final Calendar calendar = Calendar.getInstance();
    private DatePickerDialog datePickerDialog;

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

        datePicker = (EditText) findViewById(R.id.popUpDate);
        datePicker.setText(sdf.format(calendar.getTime()));

        datePicker.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                datePickerDialog = new DatePickerDialog(MainActivity.this, null, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
                datePickerDialog.getDatePicker().init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {
                    @Override
                    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        calendar.set(Calendar.YEAR, year);
                        calendar.set(Calendar.MONTH, monthOfYear);
                        calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                        datePicker.setText(sdf.format(calendar.getTime()));
                        datePickerDialog.dismiss();
                    }
                });
                datePickerDialog.show();
            }
        });
    }
}

就像一种魅力!

票数 1
EN

Stack Overflow用户

发布于 2017-01-10 04:21:51

DatePickerDialog包含一个DatePickerDatePickerOnDateChangedListener

当您选择以下日期时,可以使用OnDateChangedListener侦听器

代码语言:javascript
复制
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);

final DatePickerDialog datePickerDialog =
    new DatePickerDialog(YourActivity.this, null, year, month, day);

datePickerDialog.getDatePicker()
    .init(year, month, day, new DatePicker.OnDateChangedListener() {
        @Override
        public void onDateChanged(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
            Toast.makeText(YourActivity.this, "day" + dayOfMonth + "-month" + monthOfYear + 1 + "-year" + year, Toast.LENGTH_SHORT).show();
            // dismiss the popup when choose a date 
            datePickerDialog.dismiss();
        }
    });
datePickerDialog.show();

这个解决方案将适用于您的情况,但我认为它对用户体验(UX)不是很好,因为几乎Android应用程序都使用默认的DatePickerDialog流。

票数 2
EN

Stack Overflow用户

发布于 2017-01-02 13:46:45

现在的行为还好吗? 如果它会自动关闭.!那么系统如何知道您选择了所需的日期和时间,或者您意外地选择了它……没有自动关闭它的感觉,而不是事件触发。

但是你可以在onDateSet上关闭它。

更新:您可以这样关闭它。

代码语言:javascript
复制
// open datepicker dialog.
// set date picker for current date
// add pickerListener listner to date picker

   DatePickerDialog dialog = new DatePickerDialog(this, pickerListener, year, month,day);
   dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Text", new DialogInterface
            .OnClickListener() {
          public void onClick(DialogInterface dialog, int which) {
            if (which == DialogInterface.BUTTON_NEGATIVE) {
              // Do Stuff
             Log.i("dialog click", "dialog negative button clicked");
            dialog.dismiss();
            }
          }
        });
   dialog.dismiss();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41427930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档