【发布时间】:2017-01-20 17:19:56
【问题描述】:
首先,我是安卓新手。所以我使用 Handler 在 MainActivity.java 中的 TextView 上显示当前时间,效果很好。然后我使用 TimePicker(实际上在另一个活动中,TimeActivity.java)来选择一个时间,在该时间停止。
例如,如果使用 TimePicker 选择的时间是 8:30,则 TextView 中的时间将停止超过 8:30
还有一个 STOP 按钮调用 handler.removeMessages(0); 来停止处理程序,从而停止时间。
- 问题是,当我从 TimeActivity.java 回来时,TextView 是空白的,看起来 处理程序 没有运行,但它成功地祝酒“时间停止”当时间到了。这是什么异常?
- 我碰巧遇到了另一个问题,Toast,stopTime() 中的“时间停止”在屏幕上的时间异常长,但 stop 中的 Toast 是正常的(查看 v) 即使我在两种方法中都使用相同的逻辑来停止处理程序。这是什么原因造成的?
这是我的 MainActivity.java
import static com.gamecodeschool.broadcast.TimeActivity.minute1;
公共类 MainActivity 扩展 AppCompatActivity {
Button start,stop,set;
TextView textView;
final Handler handler = new Handler();
Runnable r;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Views
textView = (TextView)findViewById(R.id.textView);
start = (Button)findViewById(R.id.button);
stop = (Button)findViewById(R.id.button2);
set = (Button)findViewById(R.id.button3);
set.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent(getApplicationContext(),TimeActivity.class);
startActivity(intent);
}
});
}
public void stop(View v) {
handler.removeMessages(0);
Toast.makeText(this,"Stopped",Toast.LENGTH_SHORT).show();
}
public void runInBackground(View v) {
handler.post(r);
r = new Runnable() {
@Override
public void run() {
//String time = java.text.DateFormat.getDateTimeInstance().format(new Date());
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
StringBuilder stringBuilder = new StringBuilder().append(hour).append(":").append(minute);
textView.setText(stringBuilder);
if (minute==minute1){
stopTime();
}
handler.postDelayed(this,100);
}
};
}
private void stopTime() {
handler.removeMessages(0);
Toast.makeText(this,"Time Stopped",Toast.LENGTH_SHORT).show();
} }
这是我的 TimeActivity
public class TimeActivity extends AppCompatActivity {
TimePicker timePicker;
Button button;
TextView textView;
StringBuilder stringBuilder;
static int hour1,minute1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_time);
timePicker = (TimePicker)findViewById(R.id.timePicker);
button = (Button)findViewById(R.id.saveButton);
textView = (TextView)findViewById(R.id.timeView);
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
showTime(hour,minute);
}
private void showTime(int hour, int minute) {
stringBuilder = new StringBuilder().append(hour).append(":").append(minute);
textView.setText(stringBuilder);
}
public void saveTime(View v){
hour1 = timePicker.getHour();
minute1 = timePicker.getMinute();
showTime(hour1,minute1);
Toast.makeText(TimeActivity.this,hour1+":"+minute1,Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);
} }
【问题讨论】:
标签: java android android-handler