android - 活动对用户可见时立即触发事件
问题描述
我想在用户看到活动后立即创建倒计时。但是,似乎没有适当的回调。两者似乎都不onResume
是正确的回调,因为整个代码在用户看到任何东西之前就已执行。onWindowFocusChanged
结果,我以“Go!”结束。从一开始就在屏幕上。
简而言之:一旦活动对用户可见,您是否知道如何在没有任何用户交互的情况下实现倒计时?
编辑:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.util.concurrent.TimeUnit;
import android.widget.TextView;
public class ChallengeModeTutorial extends AppCompatActivity {
private void delayOneSec()
{
try
{
TimeUnit.SECONDS.sleep(2);
}
catch (InterruptedException e)
{
assert true;
}
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_challenge_mode_tutorial);
}
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
TextView readySteadyGo = (TextView) findViewById(R.id.challengeModeTutorialReadySteadyGoTextView);
// TextView tutorialText = (TextView) findViewById(R.id.challengeModeTutorialTextTextView);
TextView timeUntilStart = (TextView) findViewById(R.id.challengeModeTutorialReadyTimeTextView);
readySteadyGo.setText("");
timeUntilStart.setText("5");
delayOneSec();
timeUntilStart.setText("4");
delayOneSec();
timeUntilStart.setText("3");
delayOneSec();
readySteadyGo.setText("Ready!");
timeUntilStart.setText("2");
delayOneSec();
readySteadyGo.setText("Steady!");
timeUntilStart.setText("1");
delayOneSec();
readySteadyGo.setText("");
readySteadyGo.setText("Go!");
}
}
解决方案
问题是您阻塞了 UI 线程。当您调用setText(String)
它时,它不会立即被绘制。TextView 失效,它将在下一个绘制阶段绘制。但是如果你阻塞线程,这将永远不会发生。您必须在一秒钟后使用 apostDelayed()
来执行下一个。setText(String)
推荐阅读
- xslt - 如何使用 XSLT 将所有标题文本转换为标题大小写?
- javascript - 如何在 React 的 return 语句中使用获取结果?
- tensorflow - 我想在我的自定义层中使用 keras 层,但我无法将层的输出作为张量而不是对象返回
- javascript - 使用 bootstrap-vue 中的传单删除标记单击时弹出的默认对话框
- asp.net-mvc - 有没有办法在 Visual Studio 2019 for Mac 的上下文中获取 ViewBag、Layout 和 Model?
- c# - CryptoStream.Read 的数组边界错误
- video - FFMPEG一开始就卡在00:00:00 speed=0x很长时间
- python - pandas to_excel 如何只合并列?
- docker - Elastic with Kibana on docker 让 Kibana 服务器还没有准备好
- windows - 在 Windows 8 上使用 Get-AppxPackageManifest