我尝试编写一个应用程序,在该应用程序中,第一个用户看到了splashcreen,并在3秒后将其移至主屏幕。如果用户在这3秒钟内按下返回按钮,他将停留在初始屏幕上
我尝试了几种延迟方法(例如停止线程或某些愚蠢的循环),但无法完成任务(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)之后执行run
内部内容的主线程。