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