0

我似乎无法弄清楚要在 onTimeSet() 方法中放置什么以便将 setText 设置为与之关联的按钮。

我希望用户单击布局中的按钮并显示 TimePickerDialog。一旦用户选择了他们想要使用的时间,我希望将时间设置为相同的按钮文本。

有任何想法吗?

public 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


}

}
4

4 回答 4

1

是的,将数据从 Fragment 传递回包含 Activity 有点复杂。

基本上你有两种选择,一种简单直接,另一种更复杂,但从长远来看(对于更复杂的要求)会更好:

简单的

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    String timeString = hourOfDay+" "+minute; // <-- just for example, you'll want to do better time-formatting here.
    Button b = (Button)getActivity().findViewById(R.id.yourButtonsId);
    b.setText(timeString);
}

复杂的

在您的 Fragment 中使用 Listener接口并让您的 Activity 实现该接口并将自己设置为您的 Fragment 的侦听器:

将此添加到您的片段中:

public interface Listener {
    public void setTime(int hourOfDay, int minute);
}

// hold the listener
private Listener mListener;

// used by Activity to set itself as the listener for the fragment
public void setListener(Listener listener) {
    mListener = listener;
}

onTimeSet像这样在您的 Fragment 中实现:

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    if (mListener != null) mListener.setTime(hourOfDay, minute);
}

添加implements TimePickerFragment.Listener到 Activity 的类声明中。

在 Activity 中实现public void setTime(int hourOfDay, int minute)Listener 的方法,例如:

public void setTime(int hourOfDay, int minute) {
    String timeString = hourOfDay+" "+minute; // <-- just for example, you'll want to do better time-formatting here.
    Button b = (Button)findViewById(R.id.yourButtonsId);
    b.setText(timeString);
}

实例化片段后将其添加到您的活动中:

timePickerFragment.setListener(this);
于 2013-09-06T06:00:38.877 回答
0

试试这个我一直习惯的代码

custom = new CustomDateTimePicker(this,
        new CustomDateTimePicker.ICustomDateTimeListener() {

            @Override
            public void onSet(Dialog dialog, Calendar calendarSelected,
                    Date dateSelected, int year, String monthFullName,
                    String monthShortName, int monthNumber, int date,
                    String weekDayFullName, String weekDayShortName,
                    int hour24, int hour12, int min, int sec,
                    String AM_PM) {

                ((Button) findViewById(R.id.alerttime))
                        .setText(calendarSelected
                                        .get(Calendar.DAY_OF_MONTH)
                                + "/" + monthNumber + "/" + year + " "+
                                 + hour12 + ":" + min + ":" + "00"
                                + " " + AM_PM);
}
于 2013-09-06T05:35:34.777 回答
0
   // button click listener
   button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if(button.getText().toString().trim().length()>0){
                getTimeDialog(button.getText().toString(), new CustomClickListner() {

                   @Override
                    public void onClick(String value) {
                    btnLogin.setText(value);
                    }
                });
            }else{
                getTimeDialog("", new CustomClickListner() {

                   @Override
                    public void onClick(String value) {
                    btnLogin.setText(value);
                    }
                });
            }
    }
});


     // custom interface time dialog set time listener
     public interface CustomClickListner {
      public void onClick(String value);
    }

     // open time dialog
     public void getTimeDialog(final String strTime, final CustomClickListner target) {

    Calendar date = getTimeFromString(strTime);
    TimePickerDialog timeDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            Calendar date = Calendar.getInstance();
            date.set(Calendar.HOUR_OF_DAY, hourOfDay);
            date.set(Calendar.MINUTE, minute);
            String dateString = new SimpleDateFormat("kk:mm:ss").format(date);
            target.onClick(dateString);
        }
    }, date.get(Calendar.HOUR), date.get(Calendar.MINUTE), true);

    timeDialog.show();

}
于 2013-09-06T04:12:57.653 回答
0

只是您使用以下步骤

 private void SetTime() {
        buttonTaskTime.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String taskTime = buttonTaskTime.getText().toString();
                int mHour = Integer.parseInt(taskTime.split(":")[0]);
                String minutesmeridian = taskTime.split(":")[1];
                int mMinute = Integer.parseInt(minutesmeridian.split(" ")[0]);
                String mMeridian = minutesmeridian.split(" ")[1];
                if (mMeridian.equals(postMeridain)) {
                    if (!(mHour == 12)) {
                        mHour += 12;
                    }

                } else {
                    if (mHour == 12) {
                        mHour += 12;
                    }
                }
                hour = mHour;
                minute = mMinute;
                new TimePickerDialog(getActivity(), R.style.Theme_CustomDialog,
                        timePicker, hour, minute, false).show();
            }
        });
    }
TimePickerDialog.OnTimeSetListener timePicker = new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minutes) {
            hour = hourOfDay;
            minute = minutes;
            calendarNewTaskTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
            calendarNewTaskTime.set(Calendar.MINUTE, minutes);
            calendarNewTaskTime.set(Calendar.SECOND, 0);
            UpdateTime();
        }
    };

private void UpdateTime() {
        String meridian = " ";
        if (hour > 12) {
            hour -= 12;
            meridian = "PM";
        } else if (hour == 0) {
            hour = 12;
            meridian = "AM";
        } else if (hour == 12)
            meridian = "PM";
        else
            meridian = "AM";
        String min = " ";
        if (minute < 10) {
            min = "0" + minute;
        } else
            min = String.valueOf(minute);
        buttonTaskTime.setText(hour + ":" + min + " " + meridian);
    }
于 2013-09-06T04:36:08.053 回答