我尝试编写一个应用程序,在该应用程序中,第一个用户看到了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内部内容的主线程。

10-08 09:05