Android 에서 Fragment 중첩 커버 문제 해결 방법

1.프 래 그 먼 트 가 겹 치고 가 려 지 는 원인
주로 Fragment 의 상태 저장 메커니즘 때문에 시스템 메모리 가 부족 할 때 Fragment 의 주 Activity 가 회수 되 고 Fragment 의 인 스 턴 스 가 이에 따라 회수 되 지 않 습 니 다.
Activity 가 시스템 에 회수 되 었 을 때 onSaveInstance()방법 으로 시각 계층(View Hierarchy)을 저장 하기 때문에 Activity 가 네 비게 이 션 을 통 해 다시 재 구축 되 었 을 때 이전에 실례 화 된 Fragment 는 Activity 에 나타 나 지만 상기 코드 에서 알 수 있 듯 이 새로운 Fragment 를 재 구축 했다.이런 요 소 를 종합해 보면 여러 개의 Fragment 가 겹 쳤 다.
2.만약 이 문제 가 반드시 발생 하 는 문제 가 아니라면 디 버 깅 할 때  개발 자 옵션 의  “이벤트 보류 하지 않 음'열기,모 의 활동 을 위해 즉시 회수 합 니 다.
3.onSave InstanceState()와 onRestoreInstanceState()두 가지 방법.
시스템 이 메모리 로 Activity 를 회수 할 때 만 호출 되 는 줄 알 았 던 onSave InstanceState()는 다른 Activity 로 이동 하거나 다 중 작업 창 을 열 고 홈 으로 메 인 화면 으로 돌아 가 는 작업 에서 도 호출 되 었 으 나 onRestoreInstanceState()는 다시 Activity 로 돌아 갈 때 호출 되 지 않 았 다.그리고 내 가 onResume()에서 발견 하기 전의 Fragment 는 제거 되 었 을 뿐 비어 있 는 것 이 아니 기 때문에 네가 onResume()에서 문제 1 에서 만 든 Fragment 방법 을 실행 하 더 라 도 소 용이 없다.그래서 reove()를 통 해 실 패 를 선언 합 니 다.
이 어 조사 자 료 를 통 해 Activity 의 onSave InstanceState()에 슈퍼.on RestoreInstanceState(saved InstanceState)가 있 는 것 으로 나 타 났 다.구 글 은 이 말 에 대해"Always call the superclass so it can save the view hierarchy state"라 고 설명 했다.이 코드 를 항상 실행 하여 부모 클래스 를 호출 하여 그림 의 상 태 를 저장 합 니 다"라 는 뜻 이다.사실 여기 서 여러분 도 알 게 되 었 습 니 다.바로 이 말 때문에 다시 그림자 가 나 타 났 습 니 다.그래서 저 는 이 말 을 삭 제 했 습 니 다.그리고 onCreate()와 onRestore InstanceState()에서 문제 1 중의 Fragment 만 드 는 방법 을 동시에 사용 한 다음 에 전환 하 는 상 태 를 저장 한 결과 결과 결과 가 매우 완벽 하 다 는 것 을 알 게 되 었 습 니 다.

//  Fragment    
  private int position = 0; 
  
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_index); 
  
    setTabSelection(position); 
  } 
  
  @Override 
  protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    position = savedInstanceState.getInt("position"); 
    setTabSelection(position); 
    super.onRestoreInstanceState(savedInstanceState); 
  } 
  
  @Override 
  protected void onSaveInstanceState(Bundle outState) { 
    //     position 
    outState.putInt("position", position); 
  } 

읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기