gpt4 book ai didi

java - 检索 TextView.getText() 以设置带有开始按钮的 CountDownTimer

转载 作者:搜寻专家 更新时间:2023-11-01 08:37:39 25 4
gpt4 key购买 nike

我正处于 Android 编程冒险的开端,刚刚能够在屏幕 View 之间进行交流。所以我的下一步是成功地从 TextView 中提取文本(由对话框设置)并使用开始按钮运行基于用户选择的对话框的计时器(默认为时钟的当前分钟值)。

这是您在 screen 上看到的内容.

  1. 显示对话框中选择的 TextView。
  2. 启动对话框 TimePicker 对话框并重置启动按钮的选择器按钮。
  3. 一个启动按钮,它(应该)读取 TextView、禁用自身并根据从 TextView 字符串中提取的 Long 开始一个 CountDownTimer。
  4. 一个调试 TextView,向我显示系统实际看到的内容。

整个 Activity 由一个 Java 文件组成,其中声明了两个类,当然还有一个 XML。每次我单击我的开始按钮时,尽管 Debug TextView 显示我正确地提取了计时器立即完成的秒数的 Long 值。我可以从我的调试 TextView 中看到,当我选择 say.. 08:26 时,pSecondsLeft=26 应该是..但是计时器仍然没有从 26 开始倒计时。我看不出我的错误。

首先是 XML。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<TextView android:id="@+id/timeDisplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Time will appear here after being selected"
android:textSize="30sp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">

<Button android:id="@+id/pickTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Change the time"/>

<Button android:id="@+id/startTimer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Start the time"
/>

</LinearLayout>

<TextView android:id="@+id/timeRemaining"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="30sp"
android:text="Time Remaining"
/>


</LinearLayout>

这是我的主要 Activity 。

package com.stembo.android.botskooltimepickertutorial;

import java.util.Calendar;
import java.util.StringTokenizer;

import android.app.Activity;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

public class TimePickerActivity extends Activity {
/** Private members of the class */
private TextView displayTime;
private Button pickTime;
private Button startTimer;
private TextView timeRemaining;

private int pMinutesLeft;
private int pSecondsLeft;
/** This integer will uniquely define the
* dialog to be used for displaying time picker.*/
static final int TIME_DIALOG_ID = 0;

/** Callback received when the user "picks" a time in the dialog */
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int minLeft, int secLeft) {
pMinutesLeft = minLeft;
pSecondsLeft = secLeft;
updateDisplay();
displayToast();
}
};

/** Updates the time in the TextView */
private void updateDisplay() {
displayTime.setText(
new StringBuilder()
.append(pad(pMinutesLeft)).append(":")
.append(pad(pSecondsLeft)));
}

/** Displays a notification when the time is updated */
private void displayToast() {
Toast.makeText(this, new StringBuilder().append("Time choosen is ")
.append(displayTime.getText()), Toast.LENGTH_SHORT).show();

}

/** Add padding to numbers less than ten */
private static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

/** Capture our View elements */
displayTime = (TextView) findViewById(R.id.timeDisplay);
pickTime = (Button) findViewById(R.id.pickTime);
startTimer = (Button) findViewById(R.id.startTimer);
timeRemaining = (TextView) findViewById(R.id.timeRemaining);

/** Listener for click event of the pick button */
pickTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startTimer.setEnabled(true);
showDialog(TIME_DIALOG_ID);
}
});

/**Listener for click event of the start button */
startTimer.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
startTimer.setEnabled(false);
StringTokenizer st = new StringTokenizer(displayTime.getText().toString(), ":");
while (st.hasMoreElements()){
st.nextElement();
long pSecondsTimer = Long.parseLong(st.nextToken());
}
timeRemaining.setText(displayTime.getText()+" Token="+ pSecondsLeft);
long oneSecondInterval = 1000;
MyCount counter = new MyCount(pSecondsLeft, oneSecondInterval);
counter.start();
}
});

/** Get the current time */
final Calendar cal = Calendar.getInstance();
pMinutesLeft = cal.get(Calendar.HOUR_OF_DAY);
pSecondsLeft = cal.get(Calendar.MINUTE);

/** Display the current time in the TextView */
updateDisplay();
}

/** Create a new dialog for time picker */

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case TIME_DIALOG_ID:
return new TimePickerDialog(this,
mTimeSetListener, pMinutesLeft, pSecondsLeft, true);
}
return null;
}

public class MyCount extends CountDownTimer {
public MyCount(long pSecondsLeft, long countDownInterval){
super(pSecondsLeft, countDownInterval);
}

@Override
public void onTick(long pSecondsTimer){
displayTime.setText("Time remaining: " + pSecondsLeft);
}

@Override
public void onFinish(){
displayTime.setText("Countdown Complete!");
}
}
}

这是我遇到问题的开始按钮代码,它在主 Activity 中,但可能更容易被排除。

/**Listener for click event of the start button */
startTimer.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
startTimer.setEnabled(false);
StringTokenizer st = new StringTokenizer(displayTime.getText().toString(), ":");
while (st.hasMoreElements()){
st.nextElement();
long pSecondsTimer = Long.parseLong(st.nextToken());
}
timeRemaining.setText(displayTime.getText()+" Token="+ pSecondsLeft);
long oneSecondInterval = 1000;
MyCount counter = new MyCount(pSecondsLeft, oneSecondInterval);
counter.start();
}
});

最佳答案

您从 TimePickerDialog.OnTimeSetListener 返回的值似乎存在误解.它给你小时和分钟,但你期待的是分钟和秒。对于来自您在 onCreate 上使用的日历的值也是如此。

就是说,如果您仍在尝试使用 TimePickerDialog 来获取分钟和秒,并且完全理解您正在重新解释这些值,则需要乘以“秒”数您从选择器接收到 1000 以获得一个单位(以毫秒为单位),您可以将该单位提供给 CountDownTimer。

MyCount counter = new MyCount(pSecondsLeft * 1000, oneSecondInterval);

关于java - 检索 TextView.getText() 以设置带有开始按钮的 CountDownTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35491714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com