我尝试编写一个应用程序,其中第一个用户看到启动屏幕,3 秒后他会移动到主屏幕。如果用户在这 3 秒内按下后退按钮,他将停留在闪屏上
我尝试了几种延迟方法(例如停止线程或一些愚蠢的 for 循环),但我无法完成我的任务(3 秒后更改屏幕,如果按下后退则不会)
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
boolean checkerbool=true;// check if its in the 3s loop
boolean background=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splashscreen);
Handler handler=new Handler();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
checkerbool=false;
}
}, 3000);
if(background) setContentView(R.layout.activity_main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(checkerbool) background=false;
return true;
}
return super.onKeyDown(keyCode, event);
}
}
但是启动应用程序后它会直接跳到主屏幕 工作项目将是当用户在 3 秒后移动到不同屏幕时,如果用户按下按钮,他将停留在启动屏幕
最佳答案
重写onBackPressed
方法:
@Override
public void onBackPressed() {
checkerbool = true;
}
更改:
boolean checkerbool=false;
最后:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if(!checkerbool)
setContentView(R.layout.activity_main);
}
}, 3000);
您需要将 setContent
移动到 run
方法,因为 postDelayed
不会阻塞主线程,它只是发布执行里面的内容在您提到的时间(3000)之后运行
。
关于java - 按后退键3秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53943956/