활동에서 뒤로 버튼을 처리하는 방법


136

활동에서 뒤로 버튼을 처리하는 방법은 무엇입니까? 버튼이 몇 개 있습니다. 버튼 중 하나를 클릭하면 필요한 버튼으로 리디렉션됩니다. 제대로 작동하지만 뒤로 버튼을 누르면 완료됩니다.

이 문제를 해결하는 방법. 모든 버튼에 대해 하나의 활동 만 있습니다. 미리 감사드립니다.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {
        return false; //I have tried here true also
    }
    return super.onKeyDown(keyCode, event);
}

위의 코드를 사용하여 뒤로 버튼을 처리했지만 작동하지 않습니다. 뒤로 버튼을 누르면 그 자체가 충격을 받았습니다.

답변:


326

다음과 같이 처리 할 수 ​​있습니다.

API 레벨 5 이상

@Override
public void onBackPressed() {
    // your code.
}

API 5 이전

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

6
조각은 어떻습니까?
crushman

1
예, 사람이 조각에서 작업을 수행하는 방법을 알고 있나요
제임스 Wierzba에게

3
@ james-wierzba는 활동을 처리하고 프래그먼트에 처리를 위임합니다.
Grigorii Chudnov

19

위의 것 외에도 개인적으로 권장합니다

onKeyUp():

, 프로그램 말하기 사용자가 처음에 키를 눌렀을 때 실행됩니다를 keyDown 하지만, 그것은 것입니다 사용자가 우울 키를 유지하면서 반복합니다. *

이것은 모든 개발 플랫폼에 적용됩니다.

Google 개발팀은 뷰에서 BACK 버튼을 가로채는 경우 keydown에서 starttracking으로 KeyEvent를 추적 한 다음 keyup으로 호출해야한다고 제안했습니다.

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** Your Code ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

15

하드웨어 장치 뒤로 버튼과 소프트 홈 (뒤로) 버튼 (예 : "<-"모두에 대해 이것이 나에게 도움이되는 것입니다. (*주의 활동에 앱 바 / 툴바가 있습니다)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            //finish();
            onBackPressed();
            break;
    }
    return true;
}



@Override
public void onBackPressed() {
   //Execute your code here
   finish();

}

건배!


나는 finish를 사용했으며 이전 활동으로 돌아 가지 않습니다.
Si8

2
"finish ()"는 현재 활동 만 닫습니다. 의도를 사용하여 이전 활동으로 돌아가는 것을 처리해야합니다. Btw, 이전에서 탐색 할 때 "완료 ()"하지 않은 경우 이전 활동이 여전히 열려 있어야합니다.
S bruce

나는 무언가를 테스트하고 있으며 당신을 업데이트 할 것입니다. 답변 주셔서 감사합니다.
Si8

1
finish () 대신
super.onBackPressed

9

가장 간단한 방법은 뒤로 버튼 누름을 캡처하고 다음과 같이 moveTaskToBack (true)를 호출하는 것입니다.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Android 2.0에는 새로운 onBackPressed 메소드가 도입되었으며 Back 버튼을 처리하는 방법에 대한 권장 사항


9

다음을 사용해야합니다.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        // Take care of calling this method on earlier versions of
        // the platform where it doesn't exist.
        onBackPressed();
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    // This will be called either automatically for you on 2.0
    // or later, or by the code above on earlier versions of the
    // platform.
    return;
}

여기에 정의 된대로 : http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

이전 버전을 사용하여 코드를 컴파일하는 경우 android.os.Build.VERSION_CODES.ECLAIR를 5로 바꾸십시오 (예를 들어 ECLAIR라는 개인 int를 추가 할 수 있음)


1

이것은 나를 도왔다 ..

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

또는????? 서랍 토글에도 사용할 수 있습니다.

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
        startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();

}

나는 이것이 당신을 도울 수 있기를 바랍니다 .. :)


1

이것은 무언가를하는 간단한 방법입니다.

    @Override
        public void onBackPressed() {
            // do what you want to do when the "back" button is pressed.
            startActivity(new Intent(Activity.this, MainActivity.class));
            finish();
        }

나는 그것에 대해 더 정교한 방법이있을 것이라고 생각하지만 단순함을 좋아합니다. 예를 들어, 위의 템플릿을 사용하여 사용자가 응용 프로그램에서 로그 아웃하고 선택한 다른 활동으로 돌아갑니다.

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