[英]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.