안드로이드에서 뒤로 버튼 비활성화


334

응용 프로그램을 로그 아웃하는 동안 안드로이드에서 뒤로 버튼을 비활성화하는 방법은 무엇입니까?


1
질문을 좀 더 명확하게 할 수 있습니까? 뒤로 버튼 기본 동작을 덮어 쓰려면 여기에서이 질문을 참조하십시오. stackoverflow.com/questions/2000102/…
Gopinath

26
예상되는 운영 모델을 위반하면 전체 플랫폼에 약간의
영향을 미치므로

14
뒤로 버튼이 터치 가장자리 (물리적 아님)이고 전화 가장자리에 닿는 어리석은 Samsung S4를 처리해야하는 경우, 손바닥에 닿은 손바닥이 돌아가
garlicman

1
Android 품질 및 디자인 가이드 역할 UX-N1 에 위배 됩니다.
MiguelSlv

답변:


651

onBackPressed 메소드를 대체하고 디바이스의 뒤로 단추를 처리하려는 경우 아무 것도 수행하지 마십시오.

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}

12
이것은 키 처리 방법을 재정의하는 것보다 훨씬 좋고 깨끗하며 동일한 효과가 있습니다. 좋은 대답입니다!
Nik Reiman

2
훌륭한 솔루션 친구. 홈 버튼으로 이와 같은 방법이 있습니까?
Datta Kunde

1
대단해! 실제로 다른 활동을 취소 할 때 항상 기본 활동으로 돌아가고 싶었습니다.이 방법을 재정의하면 매우 쉽게 수행 할 수 있습니다.
Jim

죄송합니다. super.onBackPressed ()를 제거하는 것을 잊었습니다.
Aristo Michael

173

더 높은 API 레벨 2.0 이상을 찾고 있다면 이것이 효과적입니다.

@Override
public void onBackPressed() {
    // Do Here what ever you want do on back press;
}

1.6까지 안드로이드 API 레벨을 찾고 있다면.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
     return true;
     }
     return super.onKeyDown(keyCode, event);    
}

뒤로 버튼을 누르지 않도록 활동에 위의 코드를 작성하십시오.


5
이 방법의 onbackpressed API 레벨 요구 사항으로 인해 onbackpressed 사용하는 것보다 더 하위 호환성
AndrewPK

5
좋은 대답입니다. 내 프로젝트에는 필요하지 않지만 이전 방법과 새로운 방법을 모두 제공해 주셔서 감사합니다. 정답으로 표시해야합니다. +1
Jim

1
@Javanator 두 번째,하지만 마법처럼 첫 번째 작품 (API의 예를 들어 레벨 16) 나를 위해 작동하지 않을 것입니다
noloman

38

이 간단한 방법으로 super.onBackPressed ()를 호출하지 마십시오.

참고 :-강력한 근거가없는 한,이 작업을 수행하지 마십시오.

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}

6
"왜 안 되겠니"에 대한 설명은 훌륭 할 것입니다. 감사.
거의 초보자

.super를 호출하지 않는 것이 중요합니다!
Ran

3
super를 호출하지 않으면 @almostabeginner가 뒤로 버튼의 정상적인 사용을 무효화합니다. 정상적으로 작동하는 버튼이 작동을 멈 추면 사용자는 놀라게됩니다. 그들은 앱이 버그가 있거나 전화가 오작동한다고 생각할 수 있습니다. 결국 앱이 범인이 될 것입니다.
bengongon97


13

사용하고 있습니다 ........

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK)
        Toast.makeText(getApplicationContext(), "back press",      
     Toast.LENGTH_LONG).show();

    return false;
       // Disable back button..............
}

9

활동이 종료되기 전에 안드로이드 클라이언트 응용 프로그램이 일부 서버에서 로그 아웃되도록하려면-> 자체 스레드에서 서비스로 로그 아웃하십시오 (어쨌든해야 할 일입니다).

뒤로 버튼을 비활성화해도 아무런 문제가 해결되지 않습니다. 예를 들어 사용자가 전화를받을 때에도 같은 문제가 발생합니다. 전화를 받으면 네트워크에서 안정적인 응답을 받기 전에 활동이 종료 될 가능성이 높습니다.

그렇기 때문에 서비스가 자체 스레드에서 네트워크의 응답을 기다린 다음 성공하지 못하면 다시 시도해야합니다. 안드로이드 서비스는 응답을 받기 전에 죽일 가능성이 훨씬 적을뿐만 아니라 작업을 마치기 전에 실제로 죽을 경우 AlarmManager가 다시 시도하기 위해 항상 부활 할 수 있습니다.


8

onBackPressed () 메서드를 재정의하면 onBackPressed 메서드 또는 다른 클래스의 수퍼 클래스를 호출 할 필요가 없습니다.

@Override
public void onBackPressed()
{

}

또는 현재 활동을 onBackPressed () 메소드로 전달하십시오.

@Override
public void onBackPressed()
{
   startActivity(new Intent(this, myActivity.class));  
   finish();
}

필수 활동 이름을 myActivity로 바꾸십시오.

프래그먼트를 사용하는 경우 먼저 callParentMethod () 메소드를 호출하십시오.

public void callParentMethod(){
    context.onBackPressed(); // instead of context use getActivity or something related
}

그런 다음 빈 메소드를 호출하십시오.

@Override
public void onBackPressed()
{

}

6

당신이 사용하는 경우 FragmentActivity. 그런 다음 이렇게

먼저이 안에 전화하십시오 Fragment.

public void callParentMethod(){
    getActivity().onBackPressed();
}

그런 다음 onBackPressed부모 FragmentActivity클래스 옆에 메소드 를 호출 하십시오 .

@Override
public void onBackPressed() {
  //super.onBackPressed();
  //create a dialog to ask yes no question whether or not the user wants to exit
  ...
}

5

이 코드를 사용하는 것 : 만약 당신이 backpressed disable을 원한다면, super.OnBackPressed ();

@Override
public void onBackPressed() {

}

4

로그 아웃하는 동안 앱을 사용하지 않으려면 취소 할 수없는 대화 상자가 나타납니다.


4

onBackPressed()활동 에서 메소드를 대체하고 수퍼 클래스 호출을 제거 할 수 있습니다 .

@Override
public void onBackPressed() {
  //remove call to the super class
  //super.onBackPressed();
}

3

뒤로 버튼의 방법을 재정의하면됩니다. 뒤로 버튼을 누를 때 아무 일도 일어나지 않도록 원하는 경우 메소드를 비워 둘 수 있습니다. 아래 코드를 살펴보십시오.

@Override
public void onBackPressed() 
{
   // Your Code Here. Leave empty if you want nothing to happen on back press.
}

3

위의 답변 에서이 두 가지 방법을 분리하십시오.

onBackPressed () (API 레벨 5, Android 2.0)

onKeyDown () (API 레벨 1, 안드로이드 1.0)

또한 대체 할 수 있습니다 dispatchKeyEvent()(API 레벨 1, 안드로이드 1.0) , 같은

dispatchKeyEvent() (API 레벨 1, 안드로이드 1.0)

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    // TODO Auto-generated method stub
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        return true;
    }
    return super.dispatchKeyEvent(event);
}


2

나를 위해 재정의 onBackPressed()는 효과가 없었지만 어떤 활동이 잘 시작되어야하는지 명시 적으로 지적했습니다.

@Override
public void onBackPressed(){
  Intent intent = new Intent(this, ActivityYouWanToGoBack.class);
  startActivity(intent);
}

1

이 시도:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
 if (keyCode == KeyEvent.KEYCODE_BACK) {

   return true;
 }
   return super.onKeyDown(keyCode, event);    
}

1

super.onBackPressed()에서 제거하십시오 public void onBackPressed(). 그것은 안드로이드 9에서 테스트

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.