首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetText和TimePickerDialog

SetText和TimePickerDialog
EN

Stack Overflow用户
提问于 2013-09-06 02:59:21
回答 4查看 2.4K关注 0票数 0

我似乎不知道在onTimeSet()方法中放置什么,以便将setText放到与其关联的按钮中。

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

有什么想法吗?

代码语言:javascript
复制
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


}

}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-06 06:00:38

是的,把数据从片段传回给包含的活动有点复杂。

基本上,您有两个选项,一个简单且向前倾斜,另一个更复杂,但从长远来看(对于更复杂的需求)将是更好的选择:

简单

代码语言:javascript
复制
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);
}

精密

在片段中使用侦听器接口,并使活动实现该接口,并将自身设置为片段的侦听器:

将此添加到您的片段中:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    if (mListener != null) mListener.setTime(hourOfDay, minute);
}

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

在活动中实现侦听器的public void setTime(int hourOfDay, int minute)方法,例如:

代码语言:javascript
复制
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);
}

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

代码语言:javascript
复制
timePickerFragment.setListener(this);
票数 1
EN

Stack Overflow用户

发布于 2013-09-06 04:12:57

代码语言:javascript
复制
   // 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();

}
票数 0
EN

Stack Overflow用户

发布于 2013-09-06 04:36:08

只需使用以下步骤

代码语言:javascript
复制
 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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18649180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档