2016-09-05 3 views
2

조각을 많이 사용하는 안드로이드 응용 프로그램을 개발 중입니다. 문제가있어 지금까지 해결책을 찾을 수 없었습니다. 흐름은 다음과 같습니다. 앱이 실행되고 MainActivity가 첫 번째 응답자입니다. 이제 사용자 상호 작용에 따라 여러 단편이로드되고 스택으로 푸시됩니다. > 프래그먼트 A - -> 프래그먼트 B -> 단편 C -> 등복원시 안드로이드 리로드 조각 스택

위로 이력과 같이 활성화

주요 활동 :

단편 C -> 단편 B 여기서 은 일례이며 -> 조각 A -> 등.

내 응용 프로그램이 포 그라운드에있는 한 모든 것이 완벽하게 작동하지만 응용 프로그램이 백그라운드에서 실행되면 모든 것이 손상됩니다.

예를 들어 조각 B에 있고 집 버튼을 누르면 응용 프로그램이 백그라운드로 이동하고 다시 복원 할 때 조각 A가있는 MainActivity에서 시작됩니다. 또한 도구 모음에는 조각 B의 제목이 표시됩니다. 조각 A에는 recyclerview가 포함되어 있기 때문에 배경 이미지와 같이 항목 행 사이에 조각 B 부분을 볼 수 있습니다. 응용 프로그램이 복원 될 때

가 가져
MyFragment theFragment = new MyFragment(); 
MainActivity.instance.loadFragment(theFragment, true); 

내가 달성하고자하는 것을 : 나는 MainActivity에서와 조각에서이 함수를 호출

public void loadFragment(Fragment fragment, Boolean addToStack) { 

    // Load fragment 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(R.id.frame_container, fragment); 
    fragmentTransaction.addToBackStack(null); 

    // show back button 
    if (addToStack) { 

     // Code to show the back button. 
    } 
    else if (fragmentManager.getBackStackEntryCount() > 0 && !addToStack) { 

     hideBackButton(); 

     fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    } 

    fragmentTransaction.commitAllowingStateLoss(); 
} 

:

이 내가 조각을로드하는 방법입니다 이전에로드 된 조각으로 직선적으로 이동하여 전체 "이전"기록을 유지합니다. 어떻게해야합니까?

코드의 다른 부분이 필요한지 확실하지 않지만 필요한 경우 게시 할 예정입니다.

답변

0

좋아 그래서, 많은 연구 후에 나는 ... 문제를 발견하고 문제는 내 실수였다.

동일한 문제가 발생할 수있는 모든 사용자에게 신고하고 싶습니다. 처음에는

내가 너무 같은 조각 onResume에 교체() 함수를 강제로 시도 :

Fragment f = getSupportFragmentManager().findFragmentById(R.id.container); 
FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.frame_container, f); 
fragmentTransaction.addToBackStack(null); 

그러나 안드로이드는 적어도 내 지식에 자동으로이 모든 것을 처리해야하고, 그래서 더 파고 시도 마침내 내 onStart() 메서드로 좁혔습니다. 는 기본적으로 나는 청소의 EventBus를 등록하고 함수 호출

if (!EventBus.getDefault().isRegistered(this)) { 

    EventBus.getDefault().register(this); 

    UserNetworkManager userNetworkManager = new UserNetworkManager(MainActivity.mainActivity); 
    userNetworkManager.fetchFeed(); 
} 

이 코드는 문제를 생성 한 모든 후 거기 넣어 필요하지 않았다을, 그래서에서 onCreate() 메소드로 이동 한 내 코드가 조금이라도 다 잘 작동한다.

0

호출 onResume() 함수 :

public void onResume(){ 
    Fragment frg = null; 
    frg = getSupportFragmentManager().findFragmentByTag("Your_Fragment_TAG"); 
    final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.detach(frg); 
    ft.attach(frg); 
    ft.commit(); 
} 
+0

답장을 보내 주셔서 감사합니다. 그러나 제대로 작동하지 않습니다. 내 조각의 onResume에는 getSupportFragmentManager()에 대한 액세스 권한이 없습니다. 나는 또한 getFragmentManager(). findFragmentByTag ("tag_here") 및 getChildFragmentManager(). findFragmentByTag ("tag_here")를 시도했지만 그들은 매번 null을 리턴한다. 당신의 접근 방식에 대해 좀 더 알려주시겠습니까? – Luca