我正在使用Android项目,并希望让用户通过DatePicker和TimePicker设置日期和时间。
我想在设置日期后显示TimePicker。但是,TimePicker出现两次,我不知道原因。这是我的代码:
Create1Activity.java
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.app.TimePickerDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.widget.TimePicker;
import android.widget.DatePicker;
import java.util.Calendar;
public class Create1Activity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener,
DatePickerDialog.OnDateSetListener{
// public final String[] headers = new String[]{"Player 1 ID","Player 2 ID","Bet","Bet Time"};
public String strUserName = "";
public int UserId;
public int deal_no=0;
public int year,month,day,hour,minute;
public String[][] arrGameTable ; //(match_id,description)
private TextView tvDisplayTime;
private TimePicker timePicker1;
private Button btnChangeTime;
static final int TIME_DIALOG_ID = 999;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create1);
Bundle extras = getIntent().getExtras();
//String username;
if (extras == null) {
strUserName = null;
} else {
strUserName = extras.getString("USERNAME");
UserId=extras.getInt("USERID");
}
TextView txtUser = (TextView) findViewById(R.id.textUser);
txtUser.setText(strUserName);
final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DATE);
hour = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE);
//lm = (LinearLayout) findViewById(R.id.linearLayout_Table);
//svrGetGame = new GetGameFromServer();
//svrGetGame.execute((Void) null);
}
public void showTimePickerDialog() {
DialogFragment newFragment = new TimePickerFragment();
Bundle args=new Bundle();
args.putInt("hour", hour);
args.putInt("minute", minute);
newFragment.setArguments(args);
newFragment.show(getFragmentManager(), "timePicker");
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// Do something with the time chosen by the user
Log.d("onTimeSet", String.valueOf(hourOfDay)+" "+String.valueOf(minute));
this.hour=hourOfDay;
this.minute=minute;
}
public void showDatePickerDialog(View v) {
DatePickerFragment newFragment = new DatePickerFragment();
Bundle args=new Bundle();
args.putInt("year", year);
args.putInt("month", month);
args.putInt("day", day);
newFragment.setArguments(args);
newFragment.show(getFragmentManager(), "datePicker");
}
@Override
public void onDateSet(DatePicker view, int year, int month,int day) {
// Do something with the time chosen by the user
Log.d("onDateSet", String.valueOf(month)+" "+String.valueOf(day));
this.year=year;
this.month=month;
this.day=day;
showTimePickerDialog();
/*
DialogFragment newFragment = new TimePickerFragment();
Bundle args=new Bundle();
args.putInt("hour", hour);
args.putInt("minute", minute);
newFragment.setArguments(args);
newFragment.show(getFragmentManager(), "timePicker");
*/
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onStop() {
super.onStop();
}
public void BtnBackClick(View view) {
Log.d("BtnBackClick", "Go Select Page");
finish();
}
@Override
protected void onCancelled() {
//showProgress(false);
}
}
}
DatePickerFragment.java:
import android.app.DialogFragment;
import android.app.Activity;
import android.app.Dialog;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.*;
import android.app.TimePickerDialog;
import android.text.format.DateFormat;
import android.os.Bundle;
public class DatePickerFragment extends DialogFragment
{
DatePickerDialog.OnDateSetListener mListener;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
mListener = (DatePickerDialog.OnDateSetListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " must implement onTimeListener");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
int year = getArguments().getInt("year");
int month = getArguments().getInt("month");
int day = getArguments().getInt("day");
// Create a new instance of TimePickerDialog and return it
return new DatePickerDialog(getActivity(), mListener, year,month,day);
}
}
TimePickerFragment.java:
import android.app.DialogFragment;
import android.app.Activity;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.*;
import android.text.format.DateFormat;
import android.os.Bundle;
public class TimePickerFragment extends DialogFragment {
OnTimeSetListener mListener;
// Override the Fragment.onAttach() method to instantiate the NoticeDialogListener
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
mListener = (OnTimeSetListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " must implement onTimeListener");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
int hour = getArguments().getInt("hour");
int minute = getArguments().getInt("minute");
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), mListener, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
}