마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 눌렸을 떄 다른 화면으로 실행되기

0 추천

java 안드로이드 스튜디오 사용하고 있습니다

현재 화면은 sub1(로고 화면) , main(사용자 등록화면), sub2 (버튼 화면), sub3 (버튼 확인 문구 화면) 이렇게 구성되어 있구요

어플 최초 설치 시에만 로고 화면 다음 사용자 등록 화면이 나오게 해뒀고 (sub1에서) 

버튼 화면에서 버튼이 눌리면 버튼 확인 문구 화면으로 넘어가는데 

사용자가 한 번이라도 이 버튼을 눌렀다면 어플을 종료시키고 다시 작동 시에도 로고 화면 다음에 버튼 확인 문구 화면을 띄우고 싶습니다

 

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SharedPreferences pref = getSharedPreferences("checkFirst", Activity.MODE_PRIVATE);
        boolean checkFirst =pref.getBoolean("checkFirst",false);
        if(!checkFirst) {
            SharedPreferences.Editor editor = pref.edit();
            editor.putBoolean("checkFirst", true);
            editor.commit();

            setContentView(R.layout.activity_sub1);

            Handler handler = new Handler();
            handler.postDelayed(() -> {
                Intent intent = new Intent(sub1.this, MainActivity.class);
                startActivity(intent);
                finish();
            }, 2000);
        } else {
        setContentView(R.layout.activity_sub1);

        Handler handler = new Handler();
        handler.postDelayed(() -> {
            Intent intent = new Intent(sub1.this, sub2.class);
            startActivity(intent);
            finish();

        }, 2000);
    }
}}

 

도화원2 (160 포인트) 님이 2022년 5월 6일 질문

1개의 답변

0 추천

아래와 같이 SharedPreferences를 저장할 수 있는 클래스를 하나 만드세요.

public class AppConfig {
    private static final String PREF_NAME = "appConfig";
    private static final String KEY_ONBOARDED = "onboarded";

    private final SharedPreferences prefs;

    public AppConfig(Context context) {
        prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    }

    public boolean isOnBoarded() {
        return prefs.getBoolean(KEY_ONBOARDED, false);
    }

    public void setOnBoarded(boolean value) {
        prefs.edit().putBoolean(KEY_ONBOARDED, value).apply();
    }
}

 

그리고  sub1에서 isBoarded를 읽어서 true 이면 버튼확인 화면으로 가게 하구요, 아니면 등록화면으로 가게하세요.

먼저 액티비티 이름을 알기 쉽게 바꾸세요.

sub1 -> SplashActivity
main -> RegisterActivity
sub2 -> ??? 버튼 화면이 뭔지 모르겠네요. AppTour같이 보이긴하는데...
sub3 -> WelcomeActivity(?)

public class SlpashActivity extends AppCompatActivity {
    private AppConfig appConfig;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        appConfig = new AppConfig(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        setupViews();
    }

    private void setupViews() {
        if (appConfig.isOnBoarded()) {
            showWelcome();
            return;
        }

        showRegister();
    }

    private void showRegister() {
        RegisterActivity.show(this);
        this.finish();
    }

    private void showWelcome() {
        WelcomeActivity.show(this);
        this.finish();
    }
}

 

WelcomeActivity에서는 버튼 확인시 setOboarded = true로 만드시면 됩니다.

public class WelcomeActivity extends AppCompatActivity {

    public static void show(Context context) {
        Intent intent = new Intent(context, WelcomeActivity.class);
        context.startActivity(intent);
    }

    private AppConfig appConfig;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        appConfig = new AppConfig(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);

        setupViews();
    }

    private void setupViews() {       
        findViewById(R.id.confirmBtn).setOnClickListener(view -> {
            appConfig.setOnBoarded(true);
            showMain();
        });
    }

    private void showMain() {
        MainActivity.show(this);
        this.finish();
    }
}

 

spark (227,830 포인트) 님이 2022년 5월 6일 답변
...