프로그래밍 방식으로 조각이 추가 된 활동이 있다고 가정 해보십시오.
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
보이는 이전 조각으로 돌아가는 가장 좋은 방법은 무엇입니까?
안드로이드에서 버튼 클릭시 트리거 백 버튼 기능을 발견 했지만 백 키 이벤트를 시뮬레이션하는 것이 올바른 방법이 아니라고 생각합니다 (그리고 작동하지 않을 수도 있음).
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
전화 finish()
하면 관심이없는 활동이 종료됩니다.
이것에 대해 더 좋은 방법이 있습니까?
답변
getFragmentManager().popBackStack()
방법을 살펴보십시오 (선택할 수있는 몇 가지가 있음)
http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack ()
답변
제공된 다른 답변을 자세히 설명하기 위해 이것은 내 솔루션입니다 (활동에 배치).
@Override
public void onBackPressed(){
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
Log.i("MainActivity", "popping backstack");
fm.popBackStack();
} else {
Log.i("MainActivity", "nothing on backstack, calling super");
super.onBackPressed();
}
}
답변
조각을 업데이트 / 추가 할 때
를 포함해야합니다 .addToBackStack()
.
getSupportFragmentManager().beginTransaction()
.add(detailFragment, "detail") // Add this transaction to the back stack (name is an optional name for this back stack state, or null).
.addToBackStack(null)
.commit();
그 후 getFragments.popBackStackImmediate()
조각을 추가 / 업데이트하면 true를 반환하고 현재 화면으로 돌아갑니다.
답변
해당 줄을 onBackPressed () 메서드에 추가하십시오. 백 스택에 프래그먼트가 있으면 popBackStackImmediate () 메소드로 이전 프래그먼트로 돌아갑니다.
if(getFragmentManager().getBackStackEntryCount() > 0){
getFragmentManager().popBackStackImmediate();
}
else{
super.onBackPressed();
}
`
답변
이 솔루션은 기본 조각에서 다시 누르면 앱을 닫고 싶을 때 하단 막대 기반 조각 탐색에 완벽하게 작동합니다.
반면에 내 코드에서 “DetailedPizza”로 정의 된 보조 조각 (조각 조각)을 열면 이전 조각의 기본 조각이 반환됩니다. 건배!
다시 눌러 진 내부 활동은 다음과 같습니다.
Fragment home = getSupportFragmentManager().findFragmentByTag("DetailedPizza");
if (home instanceof FragmentDetailedPizza && home.isVisible()) {
if (getFragmentManager().getBackStackEntryCount() != 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
} else {
//Primary fragment
moveTaskToBack(true);
}
다음과 같이 다른 조각을 시작하십시오.
Fragment someFragment = new FragmentDetailedPizza();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.container_body, someFragment, "DetailedPizza");
transaction.addToBackStack("DetailedPizza");
transaction.commit();
답변
addToBackStack ()이 프래그먼트 트랜잭션에 추가되어 있지 않은 경우 이러한 답변이 작동하지 않지만 다음을 사용할 수 있습니다.
getActivity().onBackPressed();
당신의 조각에서 한 걸음 뒤로 가십시오.
답변
다음 코드를 사용하여 프로그래밍 방식으로 이전 조각으로 돌아갑니다.
if ( getFragmentManager().getBackStackEntryCount() > 0)
{
getFragmentManager().popBackStack();
return;
}
super.onBackPressed();