如何在Android对话框中放置计时器

时间:2014-04-11 20:19:24

标签: android timer android-alertdialog

如何在Android对话框中放置一个Timer?我已经构建了所有对话框方法,但是我似乎无法弄清楚每次定时器触发时如何更新对话框视图中的文本。我的update方法已被另一个类每秒调用一次。

到目前为止,这是我的代码:

    public class PlaybackTimerEndingDialog extends DialogFragment implements TimerCallbacks.updateTimer {
    private AlertDialog.Builder mBuilder;
    private long mTime;
    private Context mContext;
    private View mTimerEndingView;

    public PlaybackTimerEndingDialog(long startTime, Context context){
        this.mTime = startTime;
        this.mContext = context;
    }


    private void updateView(String message_text){
        LayoutInflater inflater = this.getActivity().getLayoutInflater();
        this.mTimerEndingView = inflater.inflate(R.layout.playback_timer_ending, null);
        TextView messageView = (TextView) this.mTimerEndingView.findViewById(R.id.timer_ending_message);
        messageView.setText(message_text);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        this.updateView("The sleep timer will expie in "+ this.formatTime(this.mTime));

        this.mBuilder = new AlertDialog.Builder(this.mContext)
        //      this.mBuilder.setMessage("The sleep timer will expie in "+ this.formatTime(this.mTime))
        .setPositiveButton("Add more time", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                TimerCallbacks.createTimer listener = (TimerCallbacks.createTimer) PlaybackTimerEndingDialog.this.mContext;
                listener.createTimerDialog();
            }
        })
        .setNegativeButton("Cancel timer", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                TimerCallbacks.createTimer listener = (TimerCallbacks.createTimer) PlaybackTimerEndingDialog.this.mContext;
                listener.stopTimer();
            }
        });
        this.mBuilder.setView(this.mTimerEndingView);
        // Create the AlertDialog object and return it
        return this.mBuilder.create();
    }

    @Override
    public void finished() {
        // TODO Auto-generated method stub
    }

    @Override
    public void update(long time) {
        // TODO Auto-generated method stub
        //      this.getDialog().set
        this.updateView("The sleep timer will expie in "+ this.formatTime(time));
        this.mTime = time;
        Log.d("current time", Long.toString(time));
        //      this.mBuilder.setMessage("The sleep timer will expie in "+ this.formatTime(time));
    }

    private String formatTime(long time) {
        int seconds = (int) (time / 1000) % 60 ;
        int minutes = (int) ((time / (1000*60)) % 60);
        String mnStr = (minutes<10 ? "0" : "")+minutes;
        String secStr = (seconds<10 ? "0" : "")+seconds;
        return "-"+mnStr +":"+ secStr;
    }
}

对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

将它放在你想要启动计时器的某个功能中。

        final Handler handler = new Handler();
        handler.postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
               updateView("fired");

            }
        }, 1000);

更新:它是每次更新新布局的更新方法,而对话框使用的是第一个充气布局。