Java 希望创建一个通用变量(我希望这是正确的术语)
我希望作出一些改变,这样我就不必重复我的代码(有意义) 以下是我目前的情况:Java 希望创建一个通用变量(我希望这是正确的术语),java,android,variables,Java,Android,Variables,我希望作出一些改变,这样我就不必重复我的代码(有意义) 以下是我目前的情况: package com.rcd.learningactivities; import java.text.DecimalFormat; import java.util.concurrent.TimeUnit; import android.app.Activity; import android.os.Bundle; import android.os.CountDownTimer; import android
package com.rcd.learningactivities;
import java.text.DecimalFormat;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView blueTimer = (TextView) findViewById(R.id.blueTimer);
Button blue = (Button) findViewById(R.id.button1);
final TextView redTimer = (TextView) findViewById(R.id.redTimer);
Button red = (Button) findViewById(R.id.button2);
final CountDownTimer cd = new CountDownTimer(300000, 1000) {
public void onTick(long millisUntilFinished) {
DecimalFormat dfmin = new DecimalFormat("0");
DecimalFormat dfsec = new DecimalFormat("00");
double seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)%60;
double min = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);
blueTimer.setText(String.valueOf(dfmin.format(min)) + ":" + String.valueOf(dfsec.format(seconds)));
}
public void onFinish() {
blueTimer.setText("5:00");
}
};
blue.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (blueTimer.getText().toString().contains("5:00")){
cd.start();
} else {
cd.cancel();
cd.onFinish();
}
}
});
red.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (redTimer.getText().toString().contains("5:00")){
cd.start();
} else {
cd.cancel();
cd.onFinish();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
我希望blue.setOnClickListener和red.setOnClickListener都能够利用我的cd倒计时,但是我需要blueTimer.setText(字符串…)能够根据用户单击的按钮更改为redTimer.setText(字符串…)
我真的希望这是有意义的,如果我想这个倒退,请让我知道
基本上,我想在上面的onTick方法中创建blueTimer,变量x。重点是使用类字段或属性:
public class MainActivity extends Activity {
protected CountDownTimer cd;
private Button lastPressedButton;
private Button red;
private Button blue;
private TextView blueTimer;
private TextView redTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
blueTimer = (TextView) findViewById(R.id.blueTimer);
blue = (Button) findViewById(R.id.button1);
redTimer = (TextView) findViewById(R.id.redTimer);
red = (Button) findViewById(R.id.button2);
cd = new CountDownTimer(300000, 1000) {
public void onTick(long millisUntilFinished) {
DecimalFormat dfmin = new DecimalFormat("0");
DecimalFormat dfsec = new DecimalFormat("00");
double seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)%60;
double min = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);
if (lastPressedButton == red){
redTimer.setText(String.valueOf(dfmin.format(min)) + ":" + String.valueOf(dfsec.format(seconds)));
}
else if (lastPressedButton == blue){
blueTimer.setText(String.valueOf(dfmin.format(min)) + ":" + String.valueOf(dfsec.format(seconds)));
}
}
public void onFinish() {
if (lastPressedButton == red)
blueTimer.setText("5:00");
else if (lastPressedButton == blue){
//something else?
}
}
};
blue.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
lastPressedButton = blue;
if (blueTimer.getText().toString().contains("5:00")){
cd.start();
} else {
cd.cancel();
cd.onFinish();
}
}
});
red.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
lastPressedButton = red;
if (redTimer.getText().toString().contains("5:00")){
cd.start();
} else {
cd.cancel();
cd.onFinish();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
最简单的答案是设置要在计时器中更新的
TextView
,然后启动计时器。这需要您使用自己的类扩展倒计时程序
:
public class MyCountDownTimer extends CountDownTimer {
private TextView viewToUpdate;
public void onTick(long millisUntilFinished) {
DecimalFormat dfmin = new DecimalFormat("0");
DecimalFormat dfsec = new DecimalFormat("00");
double seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)%60;
double min = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);
// Make sure a view has been set
if (viewToUpdate != null) {
viewToUpdate.setText(String.valueOf(dfmin.format(min)) + ":" +
String.valueOf(dfsec.format(seconds)));
}
}
public void onFinish() {
if (viewToUpdate != null) {
viewToUpdate.setText("5:00");
}
}
public void setViewToUpdate(TextView v)
{
viewToUpdate = v;
}
}
现在,您可以使用它来代替倒计时,在单击侦听器中,您可以在调用
start()
之前调用setViewToUpdate()
,我的答案引发异常,您是对的。我删除了我的答案,因为你的答案更能说明问题。除了。。。这与他问的问题无关。谢谢你,这个答案对我来说很有意义,我现在已经开始工作了!这是很可能有更好的答案,但因为我仍然是非常新的,这是最容易理解的!谢谢
public class MyCountDownTimer extends CountDownTimer {
private TextView viewToUpdate;
public void onTick(long millisUntilFinished) {
DecimalFormat dfmin = new DecimalFormat("0");
DecimalFormat dfsec = new DecimalFormat("00");
double seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)%60;
double min = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);
// Make sure a view has been set
if (viewToUpdate != null) {
viewToUpdate.setText(String.valueOf(dfmin.format(min)) + ":" +
String.valueOf(dfsec.format(seconds)));
}
}
public void onFinish() {
if (viewToUpdate != null) {
viewToUpdate.setText("5:00");
}
}
public void setViewToUpdate(TextView v)
{
viewToUpdate = v;
}
}