在同一个类/活动中使用TimePicker,DatePicker和AlertDialog

问题描述 投票:0回答:2

我有一个活动中包含3个按钮。第一个按钮用于使用EditText启动自定义AlertDialog。第二个按钮需要打开DatePicker。第三个按钮需要打开TimePicker。我有第一个按钮正常工作,我有第二个按钮需要的代码,但我能让代码工作的唯一方法是创建一个不同的活动。

我需要做什么才能在同一个Activity中实现所有这三件事?它是否可能,我对所有这些东西都很陌生,所以任何基本到高级的建议都会很棒!

这是带有三个按钮的活动代码,所有这些按钮都在相应的XML文件中声明。这是我目前拥有的代码,这意味着只有AlertDialog的代码才能正常工作:

package com.example.test_project;

import java.util.Calendar;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;


public class NewWorkout extends Activity  {

@Override
protected void onCreate(Bundle onSaveInstanceState) {
    super.onCreate(onSaveInstanceState);
    setContentView(R.layout.activity_new_workout);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.new_workout, menu);
    return true;
}
public void timeOfWorkout(View view){
    Intent intent = new Intent(this, TimePickerFragment.class);
    startActivity(intent);
}


    int mYear;
    int mMonth;
    int mDay;

    TextView mDateDisplay;


    final int DATE_DIALOG_ID = 0;

    public void onCreate1(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_workout);

        mDateDisplay = (TextView) findViewById(R.id.timeOfWorkoutTextView);        
        Button button = (Button) findViewById(R.id.dateOfWorkoutButton);

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // get the current date
                final Calendar c = Calendar.getInstance();
                mYear = c.get(Calendar.YEAR);
                mMonth = c.get(Calendar.MONTH);
                mDay = c.get(Calendar.DAY_OF_MONTH);

                // display the current date
                updateDisplay();
            }
            });
                DatePickerDialog.OnDateSetListener mDateSetListener =
                        new DatePickerDialog.OnDateSetListener() {
                            public void onDateSet(DatePicker view, int year, 
                                                  int monthOfYear, int dayOfMonth) {
                                mYear = year;
                                mMonth = monthOfYear;
                                mDay = dayOfMonth;
                                updateDisplay();






                            }
                };
    }








private void updateDisplay() {
     this.mDateDisplay.setText(
                new StringBuilder()
                        // Month is 0 based so add 1
                        .append(mMonth + 1).append("-")
                        .append(mDay).append("-")
                        .append(mYear).append(" "));



}

public void nameOfWorkout(View view){
    AlertDialog.Builder alert = new AlertDialog.Builder(this);

    alert.setTitle("Enter a Name for This Workout");

    // Set an EditText view to get user input 
    final EditText input = new EditText(this);
    alert.setView(input);

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
      String value = input.getText().toString();
      TextView edit = (TextView) findViewById(R.id.nameOfWorkoutTextView);
      edit.setText(value);
      }
    });

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        // Canceled.
      }
    });

    alert.show();

}

}

java android android-activity fragment
2个回答
2
投票

您应该使用Dialog Fragment实现DatePicker和TimePicker。

以下是来自this documentation:的一些样本

public static class TimePickerFragment extends DialogFragment
                        implements TimePickerDialog.OnTimeSetListener {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current time as the default values for the picker
    final Calendar c = Calendar.getInstance();
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    // Create a new instance of TimePickerDialog and return it
    return new TimePickerDialog(getActivity(), this, hour, minute,
            DateFormat.is24HourFormat(getActivity()));
}

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    // Do something with the time chosen by the user
    }
}

您可以使用时间选择器关闭按钮,如下所示:

在你的xml中:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:text="@string/pick_time" 
    android:onClick="showTimePickerDialog" />

然后在你的活动中:

public void showTimePickerDialog(View v) {
    FragmentManager manager = getSupportFragmentManager();
    DialogFragment timePickerFragment = new TimePickerFragment();
    timePickerFragment.show(manager, "timePicker");
}

0
投票

尝试使用此代码进行日期和时间选择器对话框

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

}


private void calendarDataInit() {

    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);
    mHour = c.get(Calendar.HOUR_OF_DAY);
    mMinute = c.get(Calendar.MINUTE);

}


private void initViews() {

    imgViewDatePicker = (ImageView) findViewById(R.id.imgViewDatePicker);
    imgViewTimePicker = (ImageView) findViewById(R.id.imgViewTimePicker);
    imgViewDatePicker.setOnClickListener(this);
    imgViewTimePicker.setOnClickListener(this);     

@Override
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.imgViewDatePicker:
        showDialog(DATE_DIALOG_ID);
        break;

    case R.id.imgViewTimePicker:
        showDialog(TIME_DIALOG_ID);
        break;




private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

    public void onDateSet(DatePicker view, int year, 
            int monthOfYear, int dayOfMonth) {
        mYear = year;
        mMonth = monthOfYear;
        mDay = dayOfMonth;
        updateDate();
    }

    private void updateDate() {
        adapter.resetData();
        StringBuilder dateEvent = new StringBuilder().append(mYear).append("-").append(padMonth(mMonth + 1))
                .append("-")
                .append(mDay);
        editTxtDtae.setText(dateEvent);
        editTxtDtae.requestFocus();


    }
};

private static String padMonth(int c) {
    if (c >= 10)
        return String.valueOf(c);
    else
        return "0" + String.valueOf(c);
}


// Timepicker dialog generation
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
        new TimePickerDialog.OnTimeSetListener() {
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        mHour = hourOfDay;
        mMinute = minute;
        updatetime();
    }

    private void updatetime() {

        adapter.resetData();

        String am_pm;

        if(mHour > 12) {
            am_pm = "PM";
            mHour = mHour - 12;
        } else {
            am_pm = "AM";
        } 

        timeEvent = new StringBuilder().append(mHour)
                .append(":").append(mMinute).append(am_pm);
        editTxtTime.setText(timeEvent);
    }


};
private static String pad(int c) {
    if (c >= 10)
        return String.valueOf(c);
    else
        return "0" + String.valueOf(c);
}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this,
                mDateSetListener,
                mYear, mMonth, mDay);


    case TIME_DIALOG_ID:
        return new TimePickerDialog(this,
                mTimeSetListener, mHour, mMinute, false);

    }
    return null;
}
  }
© www.soinside.com 2019 - 2024. All rights reserved.