如何从另一个 activity 调用 Countdown OnFinish 时的方法?
How to call a method when Countdown OnFinish from another activity?
我有一个 class,它有一个 CountDownTimer,它将在我的整个项目中使用,我想在不同活动的 Countdown onFinish() 上调用不同的方法。
这是我的 CountDownTimer class;
public class CountDownTimer {
private static final long START_TIME_IN_MILLIS = 10000;
private long timeLeftInMillis = START_TIME_IN_MILLIS;
private final TextView textViewCountDown;
private CountDownTimer countDownTimer;
private boolean timerRunning;
public CountDownTimer(TextView textView) {
this.textViewCountDown = textView;
startTimer();
}
public void startTimer() {
countDownTimer = new android.os.CountDownTimer(timeLeftInMillis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
timeLeftInMillis = millisUntilFinished;
updateCountDownText();
}
@Override
public void onFinish() {
timerRunning = false;
}
}.start();
timerRunning = true;
}
public void resetTimer() {
timeLeftInMillis = START_TIME_IN_MILLIS;
updateCountDownText();
}
public void pauseTimer() {
countDownTimer.cancel();
timerRunning = false;
}
}
示例场景 - 一旦出现特定的 activity 提示,倒计时将开始,用户有 10 秒的时间做任何他想做的事情,否则它将自动收集数据并验证。因此,一旦 10s 结束验证,数据收集方法应该从 activity.
调用
我是 Android Dev 的新手,在此先感谢!
如果我必须从应用程序的其他地方调用 methods/functions,我会使用接口。
例如:
这是一个 activity:
public class SomeActivity extends AppCompatActivity implements RemoteRunner.RemoteRunnerCallback{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about_us);
RemoteRunner remoteRunnerObject = new RemoteRunner(this);
remoteRunnerObject.runExternalMethod(); // <--- This part calls the showMessage() function
}
private void showMessage(String message){
Toast.makeText(this, message,Toast.LENGTH_LONG).show();
}
@Override
public void onRemoteCalled(String message)
}
我想 运行 SomeActivity
中的方法 class:
public class RemoteRunner{
public interface RemoteRunnerCallback{
void onRemoteCalled(String message);
}
private RemoteRunnerCallback remoteRunnerListener;
public RemoteRunner(RemoteRunnerCallback remoteRunnerListener){
this.remoteRunnerListener = remoteRunnerListener;
}
public void runExternalMethod(){
remoteRunnerListener.onRemoteCalled("This message is from RemoteRunner");
}
}
有多种方法可以实现这一点,每种方法都有不同的偏好。对于您的用例,我想您可以查看 Broadcasts. Have all Activities that need to perform an action after the countdown implement a BroadcastReceiver,它对您的 CountDownTimer 发送的广播做出反应。
另一种选择是实施某种事件处理方式。 Android 不提供事件 API,但您可以查看 EventBus 库。或者,您也可以只编写自己的事件框架。对于像您这样的简单案例,它不应该太复杂。
我有一个 class,它有一个 CountDownTimer,它将在我的整个项目中使用,我想在不同活动的 Countdown onFinish() 上调用不同的方法。
这是我的 CountDownTimer class;
public class CountDownTimer {
private static final long START_TIME_IN_MILLIS = 10000;
private long timeLeftInMillis = START_TIME_IN_MILLIS;
private final TextView textViewCountDown;
private CountDownTimer countDownTimer;
private boolean timerRunning;
public CountDownTimer(TextView textView) {
this.textViewCountDown = textView;
startTimer();
}
public void startTimer() {
countDownTimer = new android.os.CountDownTimer(timeLeftInMillis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
timeLeftInMillis = millisUntilFinished;
updateCountDownText();
}
@Override
public void onFinish() {
timerRunning = false;
}
}.start();
timerRunning = true;
}
public void resetTimer() {
timeLeftInMillis = START_TIME_IN_MILLIS;
updateCountDownText();
}
public void pauseTimer() {
countDownTimer.cancel();
timerRunning = false;
}
}
示例场景 - 一旦出现特定的 activity 提示,倒计时将开始,用户有 10 秒的时间做任何他想做的事情,否则它将自动收集数据并验证。因此,一旦 10s 结束验证,数据收集方法应该从 activity.
调用我是 Android Dev 的新手,在此先感谢!
如果我必须从应用程序的其他地方调用 methods/functions,我会使用接口。
例如:
这是一个 activity:
public class SomeActivity extends AppCompatActivity implements RemoteRunner.RemoteRunnerCallback{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about_us);
RemoteRunner remoteRunnerObject = new RemoteRunner(this);
remoteRunnerObject.runExternalMethod(); // <--- This part calls the showMessage() function
}
private void showMessage(String message){
Toast.makeText(this, message,Toast.LENGTH_LONG).show();
}
@Override
public void onRemoteCalled(String message)
}
我想 运行 SomeActivity
中的方法 class:
public class RemoteRunner{
public interface RemoteRunnerCallback{
void onRemoteCalled(String message);
}
private RemoteRunnerCallback remoteRunnerListener;
public RemoteRunner(RemoteRunnerCallback remoteRunnerListener){
this.remoteRunnerListener = remoteRunnerListener;
}
public void runExternalMethod(){
remoteRunnerListener.onRemoteCalled("This message is from RemoteRunner");
}
}
有多种方法可以实现这一点,每种方法都有不同的偏好。对于您的用例,我想您可以查看 Broadcasts. Have all Activities that need to perform an action after the countdown implement a BroadcastReceiver,它对您的 CountDownTimer 发送的广播做出反应。
另一种选择是实施某种事件处理方式。 Android 不提供事件 API,但您可以查看 EventBus 库。或者,您也可以只编写自己的事件框架。对于像您这样的简单案例,它不应该太复杂。