2014-12-27 6 views
1

나는 popbackstack 문제를 많이 겪어 왔고, 내 코드를 기반으로하면 내가해야 할 일이 효과가있다.onBackPressed() popBackStack 문제

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 


     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     FragmentManager fm = getFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     ft.replace(R.id.content_frame, new MainFragment()); 
     ft.addToBackStack("Attend"); //here is the add to backstack 
     ft.commit(); 

    } 

내 빈 레이아웃 내에 내 주요 조각을 표시합니다.

나중에 새 조각을 시작하는 onOptionsItemSelected가 있습니다.

FragmentManager fm1 = getFragmentManager(); 
       FragmentTransaction ft1 = fm1.beginTransaction(); 
       ft1.replace(R.id.content_frame, new ServiceFragment()); 
       ft1.addToBackStack("ServiceTimes"); 
       ft1.commit(); 
       return true; 

이 조각이 나타납니다. 여기에 문제가 시작됩니다. 나는 메인 프래그먼트로 돌아갈 것을 기대하면서 뒤로 버튼을 누른다.

@Override 
public void onBackPressed() { 
    FragmentManager fm = getFragmentManager(); 
    if(fm.getBackStackEntryCount() > 0) { 
     Toast.makeText(getApplicationContext(),"popstack",Toast.LENGTH_SHORT).show(); 
     fm.popBackStackImmediate("Attend", fm.POP_BACK_STACK_INCLUSIVE); 

    } else { 
     Toast.makeText(getApplicationContext(),"Super",Toast.LENGTH_SHORT).show(); 
     super.onBackPressed(); 
    } 
} 

나는 무슨 일이 일어 났는지 저를 보여주기 위해 토스트 팝업을 추가하고, 다시 버튼을 누를 때 나는 나에게 말하는 ("popstack"토스트 메시지와 함께 빈 흰색 화면을 얻을 문이 정확한지 "만일" ". 때 내가 (다시 내가 기대하는 것입니다) 다시 내가 "슈퍼"를 얻을했다. 내 코드는 늘 주요 조각으로 돌아가 왜

내가 이해가 안 돼요? 키가 기억해야 할

답변

1

뭔가가 다시 것입니다 스택에 거래이 있고 조각이 아닙니다.

POP_BACK_STACK_INCLUSIVE 플래그를 사용 중이므로 이름이 "Attend" 인 트랜잭션 (예 : 되돌릴 수 있습니다. 이 트랜잭션은 첫 번째 조각을 프로그래밍 방식으로 추가 했으므로 Activity의 초기 상태로 돌아갑니다 (컨테이너에 조각이없는 경우 content_frame).

적절한 해상도는 달성하려는 대상에 따라 달라집니다 (얼마나 많은 조각이 추가 될 수 있습니까? 항상 백 프레스의 첫 번째 조각으로 돌아가는 등). 초기 트랜잭션을 백 스택으로 보냅니다. 또는 포함 플래그를 사용하지 않고 백 스택 항목 수가> 1 인 경우에만 맞춤 onBackPressed 논리를 사용하십시오.

+0

정말 고마워요. POP_BACK_STACK_INCLUSIVE이 (가) 깨달았습니다. 나는 fm.popBackStackImmediate()로 바 꾸었습니다. – Michael

관련 문제