본문 바로가기

Android/Function

[안드로이드] 뒤로(Back) 버튼 클릭 시 프래그먼트(Fragment) / 앱 종료 하기 ― onBackPressedListener

728x90
반응형

 

 

뒤로 버튼을 눌렀을 때, 프래그먼트 라면 실행중인 프래그먼트를 종료하고,

메인 액티비티라면 뒤로버튼을 두번 눌러 어플을 종료해 보겠습니다.

 

onBackPressedListener.java


public interface onBackPressedListener {
    void onBackPressed();
}

 

먼저, onBackPressedListener 인터페이스를 만들어 줍니다.

 


MainActivity.java


private long lastTimeBackPressed;
...

@Override
public void onBackPressed() {

	//프래그먼트 onBackPressedListener사용
    List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
    for(Fragment fragment : fragmentList){
       if(fragment instanceof onBackPressedListener){
            ((onBackPressedListener)fragment).onBackPressed();
            return;
       }
     }

     //두 번 클릭시 어플 종료
     if(System.currentTimeMillis() - lastTimeBackPressed < 1500){
         finish();
         return;
     }
     lastTimeBackPressed = System.currentTimeMillis();
     Toast.makeText(this,"'뒤로' 버튼을 한 번 더 누르면 종료됩니다.",Toast.LENGTH_SHORT).show();

}

 

MainActivity에서 onBackPressed()를 override하여

back 버튼이 눌렀을때의 이벤트를 실행할 수 있습니다.여기에 추가한 onBackPressedListener를 프래그먼트에서 사용할 수 있도록 코드를 추가해줍니다.

또, 메인에서 두번클릭시 어플을 종료하도록 코드를 추가하였습니다.

 


 

 

Fragment 종료하기


만든 인터페이스 onBackPressedListener를 implements해줍니다.

 

public class MyFragment extends Fragment implements onBackPressedListener {


    private ImageButton btnMain;
    ...내용입력

 

그 다음은 onBackPressed()를 override하여 프래그먼트 종료 코드를 실행해주면 됩니다.

 

@Override
public void onBackPressed() {
   goToMain();
}

//프래그먼트 종료
private void goToMain(){
   FragmentManager fragmentManager = Objects.requireNonNull(getActivity()).getSupportFragmentManager();
   fragmentManager.beginTransaction().remove(MainFragment.this).commit();
   fragmentManager.popBackStack();
}

 

 


 

 

728x90
반응형