[android] 안드로이드에서 액션 바 뒤로 버튼을 재정의하는 방법은 무엇입니까?

하드 키 뒤로 버튼이 아닌 작업 표시 줄에서 활동 뒤로 버튼을 사용자 정의하고 싶습니다. onBackPressed()방법 을 재정의했습니다 . 내 에뮬레이터 뒤로 버튼에서는 작동하지만 작업 모음 뒤로 버튼에서는 작동하지 않습니다.

나는 그것이 액션 바에서 일어나기를 원합니다. 어떻게 할 수 있습니까?

내 코드는 다음과 같습니다.

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
    return;
}

뒤로 누름이 작동하는지 여부에 관계 없이이 토스트를 사용했지만 실제 구현 변경은 이전 활동으로 돌아가는 것과 같습니다. 그러나 이것은 작업 표시 줄 위에있는 버튼 (활동 제목 옆에 있음)에서는 작동하지 않습니다.

누구든지 나에게 문제를 지정할 수 있습니다.



답변

홈 버튼 클릭 조작을 무시하고 싶다고 생각합니다. 활동에서 이와 같이이 기능을 재정의 할 수 있습니다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
        break;
    }
    return true;
}


답변

ActionBar 뒤로 버튼이 하드웨어 뒤로 버튼과 동일한 방식으로 작동하도록하려면 :

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }


답변

사용자가 뒤로 버튼을 누르거나 작업 표시 줄 홈 버튼을 누를 수 있다는 점에 유의해야합니다.

따라서 그를 동일한 목적지로 리디렉션하려면 이렇게 할 수 있습니다.

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

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    finish();
}

그러면 사용자가 키 또는 작업 표시 줄 버튼을 누르는 의도로 이동합니다.


답변

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


답변

죄송합니다 내 답변이 늦었지만 같은 질문 으로이 페이지에 도착하는 다른 사람을 위해 위의 방법을 시도했습니다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}

그러나 이것은 “뒤로”버튼 누름을 포착하지 못했습니다.

결국 “AppCompatActivity”지원 라이브러리의 작업 표시 줄을 사용하면서 “onSupportNavigateUp ()”을 재정의하는 https://stackoverflow.com/a/37185334/3697478 에서 저에게 도움이되는 방법을 찾았습니다 . (최신 액션 바 / 툴바 라이브러리에 해당하는 “onNavigateUp ()”이 있습니다.)

@Override
public boolean onSupportNavigateUp(){
  finish();
  return true;
}

매니페스트 파일에서 “android : parentActivityName =”. MainActivity “섹션을 제거했습니다.


답변

두 단계 만 사용하여이를 달성했습니다.

1 단계 : AndroidManifest.xml로 이동하고 태그에 매개 변수 추가-android : parentActivityName = “. home.HomeActivity”

예 :

 <activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

2 단계 : ActivityDetail에서 이전 페이지 / 활동에 대한 작업 추가

예 :

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


답변

다시 생성 하지 않고 ActionBar 홈 버튼을 눌러 Activity이전 인스턴스 로 돌아가려면 getParentActivityIntent 메서드를 재정 의하여 백 스택의 인스턴스 를 사용할 수 있습니다.

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}

편집 :
또한 부모 활동
launchModesingleTop 으로 설정하여 동일한 결과를 얻을 수 있습니다 .
그래서 설정android:launchMode="singleTop" 매니페스트에서 부모 활동으로 하십시오.
또는 UP 인 텐트와 함께 FLAG_ACTIVITY_CLEAR_TOP 플래그를 사용할 수 있습니다.
참조 : 위로 탐색 제공