2016-09-11 5 views
1

나는 안드로이드에서 초보자이며 뒤로 탐색에 갇힌 안드로이드 응용 프로그램을 개발하려고합니다. 내 문제는 : 활동 및 조각으로 백 스택을 관리하는 방법. frag1와안드로이드에서 뒤로 탐색

A1 활동 A2 활동 호출 A2 활동, 사용자 프로필을 확인 A1 활동의 Frag2의 개방에 파편 2.

와 A1 활동에 호출 할 경우 목록의 클릭에 사용자 목록을 표시합니다, 우리 flag_activity_reorder_to_front FragmentManager 트랜잭션을 사용하여 백 스택에 frag1을 추가하는 중

이제는 뒤로 클릭하면 A1 활동이 A2 활동 대신 frag1로 표시됩니다.

if backstack에 frag1을 추가하지 않은 경우 첫 번째 백에서는 작동하지만 두 번째 백에서는 앱에서 종료합니다.

제안 사항?

답변

0

하나의 액티비티를 사용하고 인터페이스를 사용하여 단일 액티비티를 처리하십시오. 액티비티는이 인터페이스를 구현해야합니다. 예 :

public interface FragChanger { 
    int NEXT_FRAGHELLO =1; 
    int NEXT_FRAGSET = 2; 
    int NEXT_FRAGSELECT =3; 
    int NEXT_FRAGLOG=4; 
    int NEXT_FRAGCHAT=5; 

    void onFragmentChange(int nextFrag); 


} 

당신의 활동에 있어야 다음 다시 활동에서 처리

@Override 
    public void onFragmentChange(int nextFrag) { 

     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 


     switch (nextFrag){ 
      case NEXT_FRAGHELLO: 

       break; 
      case NEXT_FRAGSET: 
       FragSet fragSet = new FragSet(); 

       ft.replace(containerId,fragSet,"fragset"); 
       ft.addToBackStack(null); 
       ft.commit(); 

       break; 
      case NEXT_FRAGSELECT: 
       FragSelect fragSelect = new FragSelect(); 

       ft.replace(containerId,fragSelect,"fragselect"); 
       ft.addToBackStack(null); 
       ft.commit(); 
       break; 
      case NEXT_FRAGCHAT: 
       FragChat fragChat = new FragChat(); 
       ft.replace(containerId,fragChat,"fragchat"); 
       ft.addToBackStack(null); 
       ft.commit();} 
       break; 

      case NEXT_FRAGLOG: 

       ft.replace(containerId,fragLog,"fraglog"); 
       ft.addToBackStack(null); 
       ft.commit(); 
       break; 
} 

:

물론
@Override 
    public void onBackPressed() { 
     Log.d(TAG,"button back pressed"); 
     //Check which fragment is displayed an do whatever you need 
     //for example like this 
if (getSupportFragmentManager().findFragmentById(containerId) instanceof FragLog){ 
     Fragment fl = getSupportFragmentManager().findFragmentByTag("fraglog"); 
     if (fl !=null){ 
      FragmentManager fm = getSupportFragmentManager(); 
      FragmentTransaction ft = fm.beginTransaction(); 

      ft.remove(fl); 
      ft.commit(); 
      return; 
     } 
     } 


    } 

, 이것은 단지 예이지만,하면 할 수있다 유용한 경우 유용