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

뒤로가기 버튼을 누르면 액티비티 재시작하기가 가능할까요?

0 추천

간단한 AR 앱을 만들고 있는데요..

액티비티/레이아웃 구조가 아래와 같습니다.

 

MainActivity

|

activity_main.xml (증강현실 스크린 뷰 - GLSurfaceView 사용)

activity_login.xml (로그인 화면)

activity_register.xml (회원가입 화면)

 

  • activity_main.xml에 '로그인' 버튼 구현
  • activity_login.xml과 activity_register.xml에 '뒤로가기' 버튼 구현
  • activity_register.xml에서 뒤로가기 -> activity.login.xml로 이동
  • activity_login.xml에서 뒤로가기 -> MainActivity로 이동

 

그래서 로그인 버튼과 뒤로가기 버튼을 MainActivity.java 파일에서 코드로 만들려고 하는데...다른 경우는 문제가 없는 반면 로그인 화면에서 MainActivity로 '뒤로가기' 할 때는 GLSurfaceView가 로딩이 안 되는 탓인지 검은 화면만 나옵니다. 아래와 같이 'position' 변수와 setContentView()만을 이용하여 화면 전환을 구현한 것이 문제인 것 같습니다. 

 

특정 버튼 클릭 시 MainActivity 자체를 다시 로딩하려면 어떻게 처리하는 게 좋을까요..

 

MainActivty.java

  // 로그인 버튼 클릭 시의 이벤트 처리
  public void onClickLogin(View v) {
    if (position.equals("activity_main")) {
      // 'position' 변수의 초기값: "activity_main"
      setContentView(R.layout.activity_login);
      position = "activity_login";
    }
  }
  
  // 회원가입 텍스트 클릭 시의 이벤트 처리
  public void onClickRegister(View v) {
    if (position.equals("activity_login")) {
      setContentView(R.layout.activity_register);
      position = "activity_register";
    }
  }
  
  // 로그인 화면에서 뒤로가기 버튼 클릭 시의 이벤트 처리: 메인 액티비티로 이동 <-- 문제 발생
  public void backFromLogin(View v) {
    if (position.equals("activity_login")) {
      setContentView(R.layout.activity_main);
      position = "activity_main";
    }
  }
  
  // 회원가입 화면에서 뒤로가기 버튼 클릭 시의 이벤트 처리: 로그인 화면으로 이동
  public void backFromRegister(View v) {
    if (position.equals("activity_register")) {
      setContentView(R.layout.activity_login);
      position = "activity_login";
    }
  }

 

activity_main.xml

...
  <android.opengl.GLSurfaceView
    android:id="@+id/surfaceview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="top" />
  
  <Button
    android:id="@+id/btnLogin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onClickLogin"
    android:text="로그인" />
...

 

activity_login.xml

...
  <ImageButton
    android:id="@+id/backFromLoginBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentBottom="true"
    android:onClick="backFromLogin"
    app:srcCompat="@android:drawable/ic_menu_revert" />
...

 

activity_register.xml

...
  <ImageButton
    android:id="@+id/backFromRegisterBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentBottom="true"
    android:onClick="backFromRegister"
    app:srcCompat="@android:drawable/ic_menu_revert" />
...

 

LinCass (320 포인트) 님이 2018년 11월 15일 질문

1개의 답변

+1 추천
 
채택된 답변

뒤로가기는 이런식으로

@Override public void onBackPressed() { 

  super.onBackPressed(); 

 startActivity(new Intent(mContext,MainActivity.class)); 

}

onBackPressed 에서 startAcitivty 이용해서 사용하시면 될거 같습니다.

 

평범 (3,560 포인트) 님이 2018년 11월 15일 답변
LinCass님이 2018년 11월 15일 채택됨
정말 잘 되네요. 감사합니다!
...