简体   繁体   English

Android Studio-我想在Dialogfragment中按按钮显示日期选择器

[英]Android Studio - I would like to show an datepicker by button in Dialogfragment

Pardon me for my poor English. 请原谅我的英语不好。 And I am new in Android studio. 我是Android Studio的新手。

I would like to show a date picker by a button in Dialogfragment. 我想通过Dialogfragment中的按钮显示日期选择器。 I can show a date picker in my activity, in my fragment, but I have no idea to add it in my Dialogfragment. 我可以在活动的片段中显示日期选择器,但不知道将其添加到Dialogfragment中。

I think my problem is I have two "onCreateDialog", one for myDialogfragment, one for a date picker. 我认为我的问题是我有两个“ onCreateDialog”,一个用于myDialogfragment,一个用于日期选择器。

Can someone help or suggest? 有人可以帮忙或建议吗?

For Date and Time we will create Two Fragment classes. 对于日期和时间,我们将创建两个片段类。
DatePickerFragment DatePickerFragment

package com.shashank;

import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.widget.DatePicker;
import android.widget.TextView;

import java.util.Calendar;

@SuppressLint("ValidFragment")
public class DatePickerFragment extends DialogFragment implements 
DatePickerDialog.OnDateSetListener {
private TextView tvdate;

@SuppressLint("ValidFragment")
public DatePickerFragment(TextView etIncomeDate) {
    this.tvdate = etIncomeDate;
}


@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    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(), (DatePickerDialog.OnDateSetListener) this, year, month, day);
}

@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
   populateSetDate(year, month+1, dayOfMonth );
}
public void populateSetDate(int year, int month, int day) {
    if(day<=9 && month <=9)
    {
        tvdate.setText(year+"-"+"0"+month+"-"+"0"+day);
    }
    else if(day<=9 && month>9)
    {
        tvdate.setText(year+"-"+month+"-"+"0"+day);
    }
    else if(day>9 && month<=9){
        tvdate.setText(year+"-"+"0"+month+"-"+day);
    }
    else{
        tvdate.setText(year+"-"+month+"-"+day);
    }
}
}


TimePickerFragment TimePickerFragment

package com.shashank;

import android.annotation.SuppressLint;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.widget.TextView;
import android.widget.TimePicker;

import java.util.Calendar;

@SuppressLint("ValidFragment")
public class TimePickerFragment extends DialogFragment implements 
TimePickerDialog.OnTimeSetListener{
private TextView tvTime;
private Calendar c;

@SuppressLint("ValidFragment")
public TimePickerFragment(TextView etIncomeTime) {
    this.tvTime = etIncomeTime;
}

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
     c = Calendar.getInstance();
    int hour = c.get( Calendar.HOUR_OF_DAY );
    int minute = c.get( Calendar.MINUTE );
    return new TimePickerDialog( getActivity(), (TimePickerDialog.OnTimeSetListener) this, hour, minute, android.text.format.DateFormat.is24HourFormat(getContext()) );
}


@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    populateSetTime(hourOfDay, minute);
}

public void populateSetTime(int hour, int minute) {
    if(minute<=9 ||minute==0)
    tvTime.setText(hour+":0"+minute);
    else
        tvTime.setText( hour+":"+minute );
}
public String checkAmPm(){
    String am_pm = " ";
    if (c.get(Calendar.AM_PM) == Calendar.AM)
        am_pm = "AM";
    else if (c.get(Calendar.AM_PM) == Calendar.PM)
        am_pm = "PM";

    return am_pm;
}
}


Now create a Fragment class with layout where we can put Date and Time Picker. 现在创建一个具有布局的Fragment类,在其中可以放置日期和时间选择器。

fragment_home.xml fragment_home.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="20dp">
    <TextView
        android:id="@+id/etDate"
        android:layout_width="180dp"
        android:layout_height="45dp"
        android:layout_gravity="center"
        android:ems="10"
        android:gravity="center"
        android:hint="DD/MM/YYYY"
        android:inputType="date"
        android:padding="5dp"
        android:textSize="18sp" />
    <TextView
        android:layout_width="90dp"
        android:layout_height="45dp"
        android:text="Date"
        android:layout_gravity="center"
        android:gravity="center"
        android:textSize="18sp"
        android:id="@+id/etHintDate"/>

</LinearLayout>

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center">
    <TextView
        android:id="@+id/etTime"
        android:layout_width="180dp"
        android:layout_height="45dp"
        android:layout_gravity="center"
        android:ems="10"
        android:hint="HH:MM"
        android:gravity="center"
        android:inputType="date"
        android:padding="5dp"
        android:textSize="18sp"
        android:layout_marginRight="5dp"
        />
    <TextView
        android:layout_width="85dp"
        android:layout_height="45dp"
        android:text="Time"
        android:layout_gravity="center"
        android:gravity="center"
        android:textSize="18sp"
        android:id="@+id/etHintTime"/>

</LinearLayout>

</LinearLayout>


HomeFragment HomeFragment

package com.shashank;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.shashank.DatePickerFragment;
import com.shashank.TimePickerFragment;

import java.util.Calendar;
import java.util.List;

public class HomeFragment extends Fragment {

String date, time = null;

final String DATE_PATTERN = "(0?[1-9]|1[012]) [/.-] (0?[1-9]|[12][0-9]|3[01]) [/.-] ((19|20)\\d\\d)";
TextView etDate, etTime, etHintDate, etHintTime;
private  int year, month , day, hour, minute;


public HomeFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    getActivity().setTitle("Date Time Picker");
    // Inflate the layout for this fragment
    View view = inflater.inflate( R.layout.fragment_home,container, false );


    etDate = (TextView) view.findViewById( R.id.etDate );
    etTime = (TextView) view.findViewById( R.id.etTime );

    etHintDate= (TextView) view.findViewById( R.id.etHintDate);
    etHintTime = (TextView) view.findViewById( R.id.etHintTime );

    Calendar cal = Calendar.getInstance();
    int year = cal.get( Calendar.YEAR );
    int month = cal.get( Calendar.MONTH);
    int day = cal.get( Calendar.DAY_OF_MONTH );
    int hour = cal.get( Calendar.HOUR_OF_DAY );
    int minute = cal.get( Calendar.MINUTE );
    etDate.setText( year+"-"+"0"+month+"-"+day );
    etTime.setText( hour+":"+minute );


        @Override
        public void onClick(View view) {
            date = etDate.getText().toString();
            time = etTime.getText().toString();
        }


    etHintTime.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DialogFragment newFragment = new TimePickerFragment(etTime);
            newFragment.show(getFragmentManager(), "TimePicker");


        }
    } );

    etHintDate.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DialogFragment newFragment = new DatePickerFragment(etDate);
            newFragment.show(getFragmentManager(), "DatePicker");

        }
    } );


    return view;
}
}


Now you can use Date and Time Picker on any page by importing: 现在,您可以通过导入在任何页面上使用日期和时间选择器:

import com.shashank.DatePickerFragment;
import com.shashank.TimePickerFragment;


in the same project. 在同一个项目中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM