【问题标题】:Datepicker: How to popup datepicker when click on button and store value in textview日期选择器:单击按钮时如何弹出日期选择器并将值存储在文本视图中
【发布时间】:2016-02-24 13:52:11
【问题描述】:
 <TextView
            android:id="@+id/tv_arrival"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="@string/arrivaldate"/>

        <Button
            android:id="@+id/btn_arrival"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="Set"/>

我想显示日期选择器弹出窗口。我找到了一些例子,但我没有正确理解。我有一个按钮,我希望当我单击按钮时会弹出日期选择器对话框,并且在设置日期后,日期应该显示在 .请提供示例代码或好的链接。

 btn_arrival.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final Dialog setDate = new Dialog(MainActivity.this);
                setDate.requestWindowFeature(Window.FEATURE_NO_TITLE);
                setDate.setContentView(R.layout.dialog_setdate);
                setDate.show();
                DatePicker date = (DatePicker) setDate.findViewById(R.id.datePicker);
                date.setMinDate(System.currentTimeMillis() - 1000);
                Calendar calender = Calendar.getInstance();

                DatePicker.OnDateChangedListener onDateChangedListener = new DatePicker.OnDateChangedListener() {
                    @Override
                    public void onDateChanged(DatePicker view, int years, int monthOfYear, int dayOfMonth) {
                        day = dayOfMonth;
                        year = years;
                        month = monthOfYear;
                        setDate.dismiss();
                        txt_arrival.setText("Arrival Date on: " + day + "." + (month + 1) + "." + year);
                        tv_departure.setText("Departure Date on: " + (day + 1) + "." + (month + 1) + "." + year + "");
                    }
                };

                day = calender.get(Calendar.DAY_OF_MONTH);
                month = calender.get(Calendar.MONTH);
                year = calender.get(Calendar.YEAR);

                date.init(year, month, day, onDateChangedListener);

            }

        });

【问题讨论】:

  • 我正在用代码更新我的问题
  • 究竟是什么不工作?显示对话框或将值放入 textView?
  • 当我点击设置按钮时,它会自动放置对话框不显示的日期以选择我想要的日期。
  • @Opiatefuchs 显示对话框不工作

标签: android datepicker android-datepicker


【解决方案1】:

这里是示例代码 像这样在您的视图上设置 onclicklistener

 Calendar dateSelected = Calendar.getInstance();
  private DatePickerDialog datePickerDialog;
dateEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           setDateTimeField() ;
        }
    });


private void setDateTimeField() {
    Calendar newCalendar = dateSelected;
    datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            dateSelected.set(year, monthOfYear, dayOfMonth, 0, 0);
            dateEditText.setText(dateFormatter.format(dateSelected.getTime()));
        }

    }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
    dateEditText.setText(dateFormatter.format(dateSelected.getTime()));
}

或者你可以点击这个链接

Datepicker: How to popup datepicker when click on edittext

【讨论】:

    【解决方案2】:

    这是针对 DatePicker 的 AlertDialog 片段的解决方法,该片段在设置时将日期放入 TextView。

    日期选择器的xml

    您可以省略 CardView 根布局并使用 LinearLayout、RelativeLayout 等任何内容。

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    card_view:cardElevation="24dp">
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text=""
            android:id="@+id/date_time_title"/>
    
        <DatePicker
            android:id="@+id/date_picker"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:calendarViewShown="true"
            android:spinnersShown="false"
            android:layout_weight="1"/>
    
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
            <Button
                android:id="@+id/date_time_not_set"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Cancel"
                android:layout_gravity="start"/>
    
            <Button
                android:id="@+id/date_time_set"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Set"
                android:layout_gravity="end"/>
    
        </FrameLayout>
    
    </LinearLayout>
    

    活动/片段的java文件

    [...] //other code
    btn_arrival.setOnClickListener( this );
    
    // Activity/Fragment implements onClick()
    @Override
    public void onClick( final View v )
    {
        switch ( v.getId( ) )
        {
            case R.id.btn_arrival: createDatePicker( tv_arrival); break;
        }
    }
    
    private void createDatePicker( final TextView tv_arrival )
    {
        final View dialogView = View.inflate( getActivity( ), R.layout.date_picker, null );
        final AlertDialog alertDialog = new AlertDialog.Builder( getActivity( ) ).create( );
        TextView tv = ( TextView ) dialogView.findViewById( R.id.date_time_title );
        tv.setText( ); // set title here
        dialogView.findViewById( R.id.date_time_set ).setOnClickListener( new View.OnClickListener( )
        {
            @Override
            public void onClick( View view )
            {
                setDatePicker( dialogView, tv_arrival );
                alertDialog.dismiss( );
            }
        } );
        dialogView.findViewById( R.id.date_time_not_set ).setOnClickListener( new View.OnClickListener( )
        {
            @Override
            public void onClick( View v )
            {
                alertDialog.dismiss( );
            }
        } );
        alertDialog.setView( dialogView );
        alertDialog.show( );
    }
    
     private void setDatePicker ( View dialogView, TextView tv_arrival )
    {
        DatePicker datePicker = ( DatePicker ) dialogView.findViewById( R.id.date_picker );
        Calendar calendar;
        SimpleDateFormat sdf = new SimpleDateFormat( "dd-MM-yyyy", Locale.ENGLISH );
        calendar = new GregorianCalendar( datePicker.getYear( ), datePicker.getMonth( ), datePicker.getDayOfMonth( ) );
        tv_arrival.setText( sdf.format( calendar.getTime( ) ) );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多