Roger Garzon Nieto 와 sohailaziz의 답변을 조합하여 사용했습니다 . 내 앱에는 단일 MainActivity와 여기에로드 된 조각 A, B, C가 있습니다. 내 "홈"조각 (A)은 OnBackStackChangedListener를 구현하고 backStack의 크기를 확인합니다. 1보다 작 으면 UP 버튼을 숨 깁니다. 조각 B와 C는 항상 뒤로 버튼을로드합니다 (제 디자인에서 B는 A에서 시작되고 C는 B에서 시작됨). MainActivity 자체는 UP 버튼 탭에서 백 스택을 팝하고 프래그먼트가 호출하는 버튼을 표시하거나 숨기는 메서드가 있습니다.
주요 활동:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getSupportFragmentManager().popBackStack();
return true;
}
return super.onOptionsItemSelected(item);
}
public void showUpButton() { getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
public void hideUpButton() { getSupportActionBar().setDisplayHomeAsUpEnabled(false); }
fragmentA (FragmentManager.OnBackStackChangedListener 구현) :
public void onCreate(Bundle savedinstanceSate) {
getActivity().getSupportFragmentManager().addOnBackStackChangedListener(this);
...
}
public void onBackStackChanged() {
if(getActivity().getSupportFragmentManager().getBackStackEntryCount() < 1) {
((MainActivity)getActivity()).hideUpButton();
}
}
fragmentB, fragmentC :
public void onCreate(Bundle savedinstanceSate) {
((MainActivity)getActivity()).showUpButton();
...
}