Eric
그는 물었다 8년 전
148

조각 뒤로를 추가된 상태로 유지할 수 있는 방법은 스택할?

39 위로 두 조각 더미 (dummy), ve 기록되었으므로 i& 전환할 수 있는 활동을. 갈 때, 프라그멘타 추가할 수 충스러웠으니 프라그멘타 프레이크망브 스택할 뒤로를 된다. 그러나 내가 돌아갈 때 프라그멘타 (뒤로를 눌러) 는 완전히 새로운 프라그멘타 생성되고 상태로 실주했습니다. 그 후, # 39 m 로 들어가서 I& 똑같은 질문을 I& # 39, ve 포함되어 있지만, 샘플 코드를 도움말에서는 완료하십시오 스크립트루트 아웃해야 문제:

public class FooActivity extends Activity {
  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(android.R.id.content, new FragmentA());
    transaction.commit();
  }

  public void nextFragment() {
    final FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(android.R.id.content, new FragmentB());
    transaction.addToBackStack(null);
    transaction.commit();
  }

  public static class FragmentA extends Fragment {
    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
      final View main = inflater.inflate(R.layout.main, container, false);
      main.findViewById(R.id.next_fragment_button).setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
          ((FooActivity) getActivity()).nextFragment();
        }
      });
      return main;
    }

    @Override public void onSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
      // Save some state!
    }
  }

  public static class FragmentB extends Fragment {
    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
      return inflater.inflate(R.layout.b, container, false);
    }
  }
}

일부 로그 메시지를 덧붙였다.

07-05 14:28:59.722 D/OMG     ( 1260): FooActivity.onCreate
07-05 14:28:59.742 D/OMG     ( 1260): FragmentA.onCreateView
07-05 14:28:59.742 D/OMG     ( 1260): FooActivity.onResume
<Tap Button on FragmentA>
07-05 14:29:12.842 D/OMG     ( 1260): FooActivity.nextFragment
07-05 14:29:12.852 D/OMG     ( 1260): FragmentB.onCreateView
<Tap 'Back'>
07-05 14:29:16.792 D/OMG     ( 1260): FragmentA.onCreateView

39 의 배반자들의 호출하십시오 it& 프레이크망a.온사베인스턴스국가 및 e-lab 은 히트 때 새로운 프라그멘타 뒤로를. 그러나, m, 프레이크망a.온사베인스턴스국가 프라그멘타 I& # 39 의 화면을 잠급니다 쉐퍼드도 불렀으매 프레젠테이션이든 않습니다. 그래서 내가 잘못 조각은 검색되어야 (weird.am) 를 추가할 필요가 스택할 뒤로를 휴양? # 39 의 [docs] [2] 기도하라주여 here& 무너지잖아!

&gt. 반면 아다토백스타크 호출하십시오 제거할 때 부분이 없는 경우 () &gt. 그 부분 중지됨인 사용자가 탐색 및 재개됩니다. &gt. 전부터예요

[2]: http://developer.android.com/guide/components/fragments.html # 트랜잭션입니다

Jan-Henk
그는 8년 전 댓글을 달았습니다
0

이후 다시 돌아갈 수 있는 부분의 언크리치 () 메서드를 높여줍니까 불렀으매 it? 만약 이 사건을 제대로 기억이 안 됩니다. 그렇지 않으면 그냥 인스턴스 변수 상태로 저장할 수 있습니다.

Jake Wharton
그는 8년 전 댓글을 달았습니다
3

@Jan-Henk 대한 어떤 것을 할 수 있도록 반입됨? 예를 들어 'a' 의 스크롤해야 포지셔닝하십시오 목록보기. 너무 멀리 후프 점프 후 업데이트하십시오 인스턴스 변수는 리스너에 스크롤해야 첨부하려면 같다.

Jan-Henk
그는 8년 전 댓글을 달았습니다
2

I agree @jakewharton 간소화하는지 내린 것으로 알고 있지만, 해야 할 방법이 없기 때문에 이를 중심으로 호출됨 언크리티비우 때 리스토어된 부분은 &solarisdvd 박스타크. 있을꺼같다:)

Eric
그는 8년 전 댓글을 달았습니다
1

언크리치 불렀으매 수 없습니다. 그래서 it& # 39 의 동일한 것으로 재사용 인스턴스입니다 하지만 언크리티비우 호출하십시오 다시? Lame. 그냥 그냥 가볍게 볼 수 있는 것 같다 '라는 결과를 얻을 경우 기존 캐시에는 언크리티비우 반품하십시오 언크리티비우 다시.

Eric
그는 8년 전 댓글을 달았습니다
0

넵, 자신에게. # 39, ll 표시하시겠습니까 I& 제출됩니다 @jan-henk 스케쳐내 답을 이를 받아들였다.

Uma
그는 7년 전 댓글을 달았습니다
1

내가 찾던 바로 그 시간. 이 방법을 사용하여 게시할 수 있는 달성됩니다 인스턴스 변수?

Muhammad Babar
그는 6년 전 댓글을 달았습니다
0

숨기십시오 () 및 추가 () 대신 교체 () 는 좋은 솔루션이 될 수 있지만!

Rule
그는 5년 전 댓글을 달았습니다
0

How do you go back 버튼을 통해 첫 번째 조각이 백됩니다 didn& # 39 의 경우, t # 39 activity& 오버라이드합니다 옹박프레스트 () 메서드를?

frostymarvelous
그는 4년 전 댓글을 달았습니다
1

그래서 내가 내 스스로 문제를 통해 (https://github.com/frostymarvelous/Folio) 에서 최근 시작된 구축현 것이다. # 39 m, 약 5 페이지 / 조각을 만들 수 있게 i& 복잡한 시작 전에 내가 점점 움 충돌. # 39 의 that& 어떤 led 나 여기. 숨기기 및 표시 는 단순히 부족하다. 뷰는 메모리 너무 무거운 편이다.

답변 13 개

돌아가면 조각 조각 같은 인스턴스입니다 스택할 뒤에서 재작성할 않는다 () '가 아니라' 로 시작됩니다 용도를 다시 언크리티비우 조각이 수명주기의 지켜보리니 [조각 수명주기의] [1].

그래서 스케쳐내 저장하였습니다 콩지름에 인스턴스 변수 및 온사베인스턴스국가 의존하지 않는 상태 ' ()'.

[1]: http://developer.android.com/guide/components/fragments.html # 만들기

animaonline
Colin M.
그는 8년 전 댓글을 달았습니다
30

최신 버전의 문서 평소의 이 주장한다. 이 페이지의 텍스트 영역에 있다고 순서도에서는 너희는너희가 상태에 있지만 main () 라는 언크리티비우 불과하다 "고 이 부분은 first 시간이 표시됩니다. http://developer.android.com/guide/components/fragments.html I& # 39 m, t, 나는 이 문제를 싸우고, 이제 don& # 39 라는 조각을 볼 수 있는 방법을 반환될 때 박스타크. (안드로이드 4.2)

princepiero
그는 7년 전 댓글을 달았습니다
9

그 비헤이비어를 로깅된 했다. 이 때 이 부분은 불렀으매 언크리티비우 () 은 항상 표시됩니다.

Otuyh
그는 6년 전 댓글을 달았습니다
0

너무 이 있다고 할 수 없어! 정말 감사합니다!

blizzard
그는 6년 전 댓글을 달았습니다
3

@ColinM. 모든 솔루션 제공 문제?

Tooroop
그는 6년 전 댓글을 달았습니다
0

이건 진짜 답! 감사합니다

Nilzor
그는 6년 전 댓글을 달았습니다
1

만약 그 조각이 포함되어 웹보기 '?' ' ()' 를 복원하기 위해 레스터인스턴스국가 웹보기 의존 상태에. 이는 엉망하지. 로만스였나 솔루션? https://stackoverflow.com/a/17869748/507339

Don Rhummy
그는 6년 전 댓글을 달았습니다
7

39 이 doesn&, t work for me. 내 인스턴스 변수는 nulll 돌아가는 대한 부분! 상태를 저장 어떻게 해야 합니까?

Kenji
그는 4년 전 댓글을 달았습니다
2

만일 절약합니다 조각 상태 및 데이터 저장 방법을 인스턴스입니다 일부터 릴레이 해서는 안 된다?

Dennis
그는 2년 전 댓글을 달았습니다
0

뭐라구오 인스턴스 변수 '우리는 얘기를 여기서요?

filthy_wizard
그는 일 년 전 댓글을 달았습니다
1

im 돌아온 이동줄에 컴포넌트와의 박스타크. 나비가테럽 사용하여 (). 모비베크리스트 호출됨. 내가 있는 포지셔닝하십시오 인수의 모비에우데스트로이드 저장합니다. 모비베크리스트 스크롤해야 시도, 이전 등에 "팝 포지셔닝하십시오 효과가 없습니다.??

itabdullah
그는 9달 전 댓글을 달았습니다
0

https://stackoverflow.com/a/9245510/5845137 - 작성하는방법에 인스턴스입니다 설명하면서 "'조각을 사용하여"'

39 루이 아비그라티온콘트로예르 Apple& 비교하여, s '에서 제대로 수행하지 않습니다', '와' 이비스콘트로예르 구글 안드로이드 소프트웨어 아키텍처입니다. # 39 의 문서 '약', 그리고 Android& 도움이 되지 않는 부분이 있다.

충스러웠으니 프라그멘타 프레이크망브 입력할 때 기존 프라그멘타 인스턴스입니다 파기됨 않습니다. # 39 를 누르면 다시 돌아가서, t, 우리는 프레이크망브 프라그멘타 don& 새로 만드는 프라그멘타 인스턴스입니다. # 39 의 ',' 은 기존 프라그멘타 instance& 언크리티비우 () 라고 불리기도 한다.

  • 펴지지 않도록 해야 할 가장 중요한 것은, s () ',' 다시 보기 때문에 언크리티비우 FragmentA& # 39 를 사용하고 있습니다 # 39 의 기존 FragmentA& 인스턴스입니다. We need to save and 재사용합니다 rootView.*

다음 코드는 제대로. 뿐만 아니라 조각 상태 유지 및 CPU 부하가 낮춰줍니다 않니다 RAM (미디어만을 펴지지 레이아웃뿐만 있기 때문에, 필요한 경우). # 39 Google& # 39, s, t believe 내가 can& 샘플 코드 및 문서 얘기 안 하지만 항상 펴지지 레이아웃뿐만.

  • 버전 1 (Don& 버전 1, # 39 사용할 수 없다. 버전 2 를 사용하십시오) *

public class FragmentA extends Fragment {
    View _rootView;
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        if (_rootView == null) {
            // Inflate the layout for this fragment
            _rootView = inflater.inflate(R.layout.fragment_a, container, false);
            // Find and setup subviews
            _listView = (ListView)_rootView.findViewById(R.id.listView);
            ...
        } else {
            // Do not inflate the layout again.
            // The returned View of onCreateView will be added into the fragment.
            // However it is not allowed to be added twice even if the parent is same.
            // So we must remove _rootView from the existing parent view group
            // (it will be added back).
            ((ViewGroup)_rootView.getParent()).removeView(_rootView);
        }
        return _rootView;
    }
}

3일 5월 2005년 업데이트 -. -

주석이 언급한 것처럼, 때로는 ' ()' 에서 ',' 언크리티비우 _rootView.getParent 널임 이로 산산조각나요 버전 2 에서 절감뿐만 _rootView 오네스트로이비에프 dell116 () 로 나왔다. 거친 안드로이드 4.0.3, 4.4.4, 5.1.0.

  • 버전 2*

public class FragmentA extends Fragment {
    View _rootView;
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        if (_rootView == null) {
            // Inflate the layout for this fragment
            _rootView = inflater.inflate(R.layout.fragment_a, container, false);
            // Find and setup subviews
            _listView = (ListView)_rootView.findViewById(R.id.listView);
            ...
        } else {
            // Do not inflate the layout again.
            // The returned View of onCreateView will be added into the fragment.
            // However it is not allowed to be added twice even if the parent is same.
            // So we must remove _rootView from the existing parent view group
            // in onDestroyView() (it will be added back).
        }
        return _rootView;
    }

    @Override
    public void onDestroyView() {
        if (_rootView.getParent() != null) {
            ((ViewGroup)_rootView.getParent()).removeView(_rootView);
        }
        super.onDestroyView();
    }
}

  • 경고!!! *

  • 이 해킹! 하지만, 제가 이 글을 읽고 테스트하려면 carefully.* 필요한 내 애플리케이션 (앱) 을 사용하고

Vince Yuan
ovluca
그는 6년 전 댓글을 달았습니다
1

좋은 답변. Thank you my friend.

Achin Kumar
그는 6년 전 댓글을 달았습니다
0

좋은 답변. 하지만, 제가 어떤 didn& # 39, t 꽤 흡수할 모든 들어온넘. 나는 이 모든 관련된 자세한 설명서를 가리키십시오 감사히 여길 수 있다면. 감사합니다

Dr. aNdRO
그는 6년 전 댓글을 달았습니다
4

널 포인터 idfsysobject. 그들위에 다른 에서

Kartik_Koro
그는 6년 전 댓글을 달았습니다
0

이 작품은 멋지구리해요 가져다줄래요 아닌, 그 이유는 수락됨 답?

SunGa
그는 6년 전 댓글을 달았습니다
0

이 협력했습니다 for me. 이 문제를 해결하기 위한 최상의 웨이우스!

Christian Brüggemann
그는 6년 전 댓글을 달았습니다
0

전화했는데 아웃해야 및 실행했음 salesforce. 큰 문제입니다. 이 부분은 제대로 안 보인다 첨부됩니다 활동 이 경우, 아니면 적어도 자신의 의견을 않습니다를 그레이스티비티 nulll. () 가 있다.

traninho
그는 6년 전 댓글을 달았습니다
36

39 의 전체 fragment& 개최하는 참조입니다 루트비에프 안 좋은 생각이에요 작용하게 된다. 여러 조각을 한 경우 해당 루트비에프 박스타크 지속적으로 추가 및 모두야 하고 있다 (매우 큰 있는 메모리 공간) 을 보유하고 있는 모든 절이 끝날 가능성이 높다고 너회들 오토프 모리에로 루트비에프 참조입니다 와 GC 칸트 이후 수집하십시오 거잖나. 내 생각에는 모든 것이 잘 펴지지 외곽진입 보기입니다 시간 () 는 안드로이드 기반의 시스템 처리하십니까 뷰 생성 / 제거) 와 있는지 요나스티비티크리스트 / 모비베크리스트 데이터의 널임. 그렇다면 이 데이터를 다른 로드하십시오 설정되었습니다 드러냈다.

gZerone
그는 6년 전 댓글을 달았습니다
4

내가 @traninho 동의한다. # 39 위로, 왜 투표 및 don& 이해하지 너무 많다.

traninho
그는 6년 전 댓글을 달았습니다
1

39 을 (를) 의 경우 사용할 수 있는 것 같은데 빈스 Yuan& @gzerone 외곽진입 틀렸다니까 합니다 수 있는 한계가 조각을 박스타크 (예를 들어 최대 5). 하지만 이 역시 단편 영화, 저의 경우는, I have a 상세함을 movies&quot 권장됨 &quot 포함되어 있습니다. 격자선. 만약 사용자가 새 영화를 만들고 있는 부분은 다음 영화 권장됨 상세함을 것으로 드러났다. 만일 내가 본 외곽진입 관심용 로메 무난히 달성할 수 있을 것처럼 내가 할 수 있는 단편 영화 상세함을 많이유 박스타크.

Krylez
그는 6년 전 댓글을 달았습니다
14
  • Don& Fragment& 볼 때, s, t # 39 는 이렇게 계층 창조하! * # 39 의 내부 활동에 대한 참조를 유보됨 당시 조각이 포함되어 있습니다. 구성에 변화가 발생할 때 활동이 다시 작성해야 한다. 주위에 있는 메모리에 계속 재사용하는 기존의 레이아웃 작업을 함께 좀비 있는모든 객체에는 또한 참조입니다. 이렇게 낭비되는 저해하는 일이기도 상위 메모리 성능 및 업무 환경을 제공하는 앱 후보 않을 때 즉각적인 중단을 포그라운드로.
roger
그는 6년 전 댓글을 달았습니다
0

'그냥' null ',' 내 상황을 _rootView.getParent () 는 단지 내 '때문에' _rootView 복귀하십시오 루트비에프.

AllDayAmazing
그는 5년 전 댓글을 달았습니다
0

하지만, 이와 같은 질문을 @traninho 물었더니 이런 링크됨 wouldn& # 39 로 보기 때문에 나쁜 효과를 설명하는 모든 t 설정뿐입니다 인스턴스 변수는 틀렸다니까? 나는 이 모든 것을 볼 수 있다 는 거의 모든 예제에서와 높여줍니까 참조입니다 모피쳐 도왔으매 어떤 차이점이 여기서요?

traninho
그는 5년 전 댓글을 달았습니다
4

@AllDayAmazing 이것은 좋은 점. 솔직히 나는 지금 매우 혼란스럽다. 그 이유를 설명해야 할 수 없는 # 39 의 개최에 대한 참조입니다 fragment& 루트비에프 양호임 하지만 참조로만 개최하는 모든 자식 루트비에프 (어차피 루트비에프 디스크입니다. diskid 참조) 은 ok?

Pengzhi Zhou
그는 5년 전 댓글을 달았습니다
0

이 단지 내 문제 해결! 감사합니다!!!

dell116
그는 5년 전 댓글을 달았습니다
2

이 경우 5 시간 떨어져 그들이실천하는 정렬할지 what& # 39 의 도청 아웃해야 디렉토리에만 너회의 고데스탕 발견사항 아웃해야 있음을 알게 될 것입니다. 이제 저는 리팩터링 a bunch of 물건을 사용 때문에 이 해킹 사건. # 39 의 내가 긁어줄게 it& 프레이크망트란스카션드라드 유지하려면 fragment& # 39 을 사용할 것을 볼 때 손대지 않은 다른 UI 에 (심지어 위). # 39 의 views.don& 프레이크망트란스카션드레프리스 () 은 # 39 건, t 너회에게 fragment& 제거할 수 있는 시스템.

dell116
그는 5년 전 댓글을 달았습니다
1

빈스, 다른 한 말씀 이 대답이 더 이상 사용하지 않도록 농담하십니까 합니다. 난 후에도 이 해킹 하면 조각을 사용하여 논리 패스이므로 제안됩니다 유지하기 때문에, 이 후 프레이크망만거 호출하십시오 프레이크망트란스카션드레모프 (하케드프라그먼트) # 39 들어서자 비베그룹 you& 조각이 제거되는 것을 re 유지하기 메모리 (농담하십니까 불안하다고요 메모리 누수가). 하지만 이를 확인할 수 있어 레벨 22 에 한해서만 apiu I& 다운 투표; d # 39 이 질문에 10 배 (서있느라 내 자신의 명성을) 만약 내가 없었다. 그냥 # 39 의 보기 계층 구조 () 를 사용하여 프레이크망트란스카션드라드 렉시한테서 이전에 검토완료 fragment& 손대지 않은.

Vince Yuan
그는 5년 전 댓글을 달았습니다
0

@dell116 의견 주셔서 감사합니다. 하지만 난 이 옵션을 이해하지 don& # 39, 메모리 누수가. # 39 의 세카운트 hackedFragment& 호출하십시오 후 프레이크망트란스카션드레모프 (하케드프라그먼트), - 1 이고, hackedFragment& # 39 의 멤버 varaibles& # 39. 세카운트 - 1. 이 GC jave 제대로 처리할 수 있어야 합니다.

dell116
그는 5년 전 댓글을 달았습니다
2

I 의 경우 최신 안드로이드 5.1 과 @vinceyuan 테스트되었습니다 v7 아프콤파트 library) 이 왼쪽 부분 6 인스턴스입니다 분리되었는지 하는 내 activity& # 39 의 프레이크망만거. 이 경우에도 GC 제대로 처리할 수 있는 내가 don& # 39, t believe it will) 이 인해 불필요한 부담을 단축시킵니다 app 은 메모리 장치 뿐만 아니라 일반적으로. 단순히 지아다 () 이 모든 해키 코드를 사용하여 완전히 필요 없음. 이렇게 하면 어떤 일을 할 수 있는 것은 사용하여 완전히 아니했으니 프레이크망트란스카션드레프리스 () 는 1 위를 차지했다.

nickmartens1980
그는 5년 전 댓글을 달았습니다
0

Gc 는 제대로 처리하지 않을 경우 더 참조입니다 존재합니다. 그러나 그것은 선택해제합니다 최대 개발자는 해당. 따라서 이 외곽진입 매우 어렵다는 것을 내아기마저도 상대로 구축 및 it all the time. 아주 나쁜 외곽진입. 난 또 don& # 39 는 구글, 애플이 수행됨 것보다 더 좋은 직장을 대체하십시오 마음에 제안이 있다. # 39 절을 don& 경우, t know how it works 관리 어렵다. 다른 플랫폼을 사용하는 방식 (만약 이러한 경우.) 는 말해둘꼐요 거들어야죠 없습니다. 안드로이드 개발에 대한 다른 생각 합니다.

agrosner
그는 5년 전 댓글을 달았습니다
0

아마 최악의 생각은 I& # 39, ve 이제까지 본 것. 얼마나 빨리 문제가 있을 경우, 당신은 다른 문제 유출 레이아웃에 렌더링됩니다 헤르지유 활동이 일어나고 있는 것으로 이 부분은 경우 모든 화면 순환부터 유지됩니다.

delive
그는 4년 전 댓글을 달았습니다
0

1method (시도가 가상 메소드 & # 39, & # 39 안드로이드리비에웨인비베그룹스레모프레비예프 호출하십시오 void (안드로이드리비에웨인비에프). 널 (null) 의 객체 참조) 과 2 방법은 잘못된, 저도 자바드란g. 린데소토프보운세스세페시옹: 불일치가 감지된. 좋은 것은 아니지만, 그 잘못된 항목설명프로세서 포지셔닝하십시오 시도하시겠습니까 작동합니다

IcyFlame
그는 4년 전 댓글을 달았습니다
0

이것은 아마도 좋은 아이디어가 아닙니다. 실제로 ',' 언크리티비우 불렀으매 경우에만 제한적으로 보기입니다 필요합니다. 이 경우 일반적인 생각을 플랫폼과 에로남이네 페이징됩니다 언크리스엑스엑스 만든 플랫폼 '' ! .

Krzysztof Dubrowski
그는 3년 전 댓글을 달았습니다
0

이는 잘못된 nnt 언크리티비우 / 만들기 위해 필요한 상황에 따라 많이 보기입니다 펴지지 구성 변했다니까 (예: 실제 솔루션 상태를 유지하기 위해 데이터의 저장 및 읽어들입니다 온사베인스턴스국가 페이징됩니다 실제로 이를 통해 이를 사브딘스턴스국가 번들에는

zafrani
그는 3년 전 댓글을 달았습니다
0

아무도 이 문제에 대해 언급한 것은 다른 전환 효과. 애니메이션 (animation) 에서 사용하는 경우 같은 기간 동안 슬라이딩 조각은 애니메이션의 루트비에프 부모가 있는 것이 아니라, 부모 없는 자식으로 루트비에프. 모 서피스에서 제거하기 루트비에프 작동하지 않습니다. 사용자가 뒤로를 푸시합니다 중간에 있는 애니메이션 너회의 앱 크래시 이갈국가렉세페시옹 했다.

아마 내가 얻을 수 있는 또 다른 방법으로는 너희는너희가 찾고 있습니다. 내가 don& # 39 라고 하지만, 내 경우에는 그 취지를 t 완벽한 솔루션을 지냈다.

내가 한 조각이 교체하는 대신 그냥 추가된 대상 조각이 있다. 추가 () 메서드를 사용하여 실행할 수 있도록 할 것입니다 '' 대신 '복귀시킴 ()'.

그밖에 믿엇어요 난 내 현재 부분 또한 숨기십시오 박스타크 추가합니다.

따라서 이는 현재 조각을 통해 새로운 조각을 오버랩하도록 제거하지 않고 그 경치말이야 (확인란 그 방법이 없는 '오네스트로이비에프 ()' 이라고 합니다. '나' 의 장점은 추가한 구성형 박국가 보기입니다 재개 하였다.

다음은 코드:

Fragment fragment=new DestinationFragment();
FragmentManager fragmentManager = getFragmentManager();
android.app.FragmentTransaction ft=fragmentManager.beginTransaction();
ft.add(R.id.content_frame, fragment);
ft.hide(SourceFragment.this);
ft.addToBackStack(SourceFragment.class.getName());
ft.commit();

아파이크 '만' () 는 시스템 호출을 볼 경우 언크리티비우 파기됨 만들어지지 않았습니다. 하지만 여기서는 메모리에서 제거하지 않는 방식으로 볼 수 있었습니다. 따라서 새로운 보기입니다 만들지 않습니다.

이 경우, 부분 대상 '에서' 마지막 조각을 제거하는 상단형 물러서요 나타납니다 프레이크망트란스카션 발쿰치로 최상위 (SourceFragment& # 39 의) 볼 수 있는 화면 위에 나타나.

설명: # 39 doesn& 것처럼 말한 것처럼 종합 솔루션을 것은, 그에 따라 더 많은 메모리를 점유하는 평소보다 분리하십시오 소스 조각을 볼 수 없다. 그래도 경배하되 목적. 또한 전혀 다른 모습을 볼 수 있는 메커니즘을 사용하는 대신 대체하면서 비사양 다르다.

그래서 별로 it& # 39 의 방식에 대한 유지하고 있으나, 이 경치말이야 어떻게 상태를 유지할 수 있습니다

Gastón Saillén
Uma
그는 7년 전 댓글을 달았습니다
0

제 경우에는 조각은 추가하기만 교체하는 대신 사용할 때 사용되는 웹 요청인지 부분 또는 아나이더 사람이었는가부텀 폴링하여 문제를 일으킨다. 이 때 B 는 A 의 조각 조각 폴링하여 일시정지할 싶다 "고 덧붙였다. 이 모든 내용을?

kaushal trivedi
그는 7년 전 댓글을 달았습니다
0

어떻게 사용하고 있는 폴링하여 퍼스트프레이크망? 남아 있는 두 개의 절을 따라 메모리 수동으로 해야 할 수 있습니다. 그들의 인스턴스들도 사용할 수 있도록 필요한 조치를 수행할 수 있습니다. 그게 뭔가 단서를, 이 중 두 번째 주 작업) 에서 이벤트를 발령합니다 추가하면 부분. ᄋ "이번 도움이 된다.

Uma
그는 7년 전 댓글을 달았습니다
1

Thank you for the 단서를 =). 내가 다 끝났어. 그러나 이것이 유일한 방법은 무엇일까요? 거쳐 적절한 방법은? 또한 홈 버튼을 누를 때 다시 절을 다시 활성 확보하십시오 모든 응용 프로그램 시작. 예를 들어, Im 이 부분 B - this way. '활동 A A - {조각을 &gt. 홈 버튼을 누른 후 다시 응용 프로그램을 시작할 때 나는 부분 B} 's' () '라고 하며, 따라서 모두 fragment& # 39 오노레스메 시작하는 폴링하여. 이 제어입니다 어떻게 해야 합니까?

kaushal trivedi
그는 7년 전 댓글을 달았습니다
1

39, 정상적인 작동을 하지 않을 수 있습니다, 시스템 doesn& 죄송합니다. 작업하십시오 검토하겠다고 조각 등 모두 이런 방식으로 직접 아이를 활동까지입니다. 비록 목적이 다른 정상 상태로 유지하는 역할을 해 조각이 매우 어려운 사실을 관리할 수 있습니다. 요즘 우리 사회의 문제, 이제 이 모든 것이 내 제안에 웨이오소리오 엔드입니다 되지 않습니다

Uma
그는 7년 전 댓글을 달았습니다
0

You for the np.선크 도와주워요!

Uma
그는 7년 전 댓글을 달았습니다
0

또한 너무 많은 추가 비헤이비어는 말하도다 10 조각, 예를 들어 (숨기기 이전) 는 메모리 문제를 일으키는 교체 없이?

kaushal trivedi
그는 7년 전 댓글을 달았습니다
1

물론 지난 내아기마저도 say not to go 대체하십시오 외곽진입 찾을 때까지 다른 어떤 솔루션을. 어려움 때문이다.

Uma
그는 7년 전 댓글을 달았습니다
0

그는 자경단원이야. 감사합니다!!!

ADT
그는 6년 전 댓글을 달았습니다
0

이 작품은 for me. Thanks.:)

n j
그는 5년 전 댓글을 달았습니다
0

무언가 빠진 것은 이 주셔서 감사합니다, 내가 이럴줄 알았어, 고마워요.

이 조각은 왔는지 구현하므로 redboot*용 디스크입니다. diskid 너무 많은 문제가 있는 지도 정보 설정 저장 / 리로드하려면. 기본적으로 나의 해결책은 활성화됨 내내 계속 이 부분 (어떤 @kaushal 비슷한 것).

현재 조각 한 조각을 B. 표시하십시오 말하도다 보고 있습니다. 각오하랬지 요약:

    • A 와 b 조각 조각 조각 제거하시겠습니까 복귀시킴 () 는 앞으로 다시 한 번 재생하느뇨 /dev/rdsk/c0t0d0s4 바꿀 것입니다.
  • 추가 () - 한 조각 조각 (만들기 및) 이 있으며, 여전히 활성인지 추가하기에서는 bdhk 중첩됩니다 백그라운드에서
  • 제거 () - A. 조각 조각 bdhk 다시 사용할 수 있는 지루려면 나중에 불렀으매 /dev/rdsk/c0t0d0s4 될 때 B

따라서 두 조각을 사용하여 patran saved&quot &quot 유지하려면,, 그냥 전환하십시오 숨기십시오 () / 쇼 ().

  • 장점 *: 쉽고 간편하게 여러 조각을 계속 실행하는 방법
  • 단점 *: 더 많은 메모리를 사용하는 렉시한테서 모두야 있습니다. 예를 들어, 디스플레이하여 비트맵입니다 많은 문제를 경험할 수 있습니다.
Google
그는 3년 전 댓글을 달았습니다
0

제발 말해보게나 bdhk 돌아갈 때 우리는 그 어떤 방식이 전화를 한 조각 조각 제거하시겠습니까? i want to 시행하십시오 조각이 일부 작업을 할 때 분리하십시오 B.

온사베인스턴스국가 () '가' 만 있으면 불렀으매 구성 변경.

다른 부분 변경 이후 구성에 변화가 없는 한 '온사베인스턴스국가 ()' 가 있기 때문에 통화를 할 수 있다. 다른 어떤 상태로 않는지? 지정할 수 있는?

일부 텍스트를 입력하면 자동으로 에디트스트 저장됩니다. Id 는 그 상태를 보고 조금도 없이 모든 UI 품목으로부터 품목으로부터 구했잖아.

Marcel Bro
Marcel Bro
그는 3년 전 댓글을 달았습니다
0

' ()' 가 부족한 경우 시스템이 파괴하기 때문에 온사베인스턴스국가 eschweiler-clarke 활동을 시작한다.

꼭 이래야겠어요 제안하세요 매우 단순한 솔루션.

뷰 참조 변수를 설정하고 보기에 시행하십시오 언크리티비우. 이미 존재하는 복귀하십시오 있는지 보기 이 변수를 관심용 동일한 보기입니다.

"' 개인 보기입니다 프레이크망비에프.

공용 보기에 언크리티비우 (레이우틴플라터 인플레이터, @Nullable 비베그룹 컨테이너인 @Nullable 번들에는 사브딘스턴스국가) { 스페리온크리티비우 (인플레이터, 컨테이너인 사브딘스턴스국가);

if (프레이크망비에프! = null) { 프레이크망비에프 반품하십시오. } 보기 보기 = 린플라테리앵 플라테 (R. 라이우 t.유르프레이크망, 컨테이너인 거짓값); 프레이크망비에프 = 보기. 다시 보기; } "'

You Qi
Arjun saini
그는 10달 전 댓글을 달았습니다
0

내 코드를 따르면 헬프룰 save my day

이전 부분을 찾을 수 있는 완벽한 솔루션으로 스태킹하고 로드형 존재하는 경우 스택할.

/**
     * replace or add fragment to the container
     *
     * @param fragment pass android.support.v4.app.Fragment
     * @param bundle pass your extra bundle if any
     * @param popBackStack if true it will clear back stack
     * @param findInStack if true it will load old fragment if found
     */
    public void replaceFragment(Fragment fragment, @Nullable Bundle bundle, boolean popBackStack, boolean findInStack) {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        String tag = fragment.getClass().getName();
        Fragment parentFragment;
        if (findInStack && fm.findFragmentByTag(tag) != null) {
            parentFragment = fm.findFragmentByTag(tag);
        } else {
            parentFragment = fragment;
        }
        // if user passes the @bundle in not null, then can be added to the fragment
        if (bundle != null)
            parentFragment.setArguments(bundle);
        else parentFragment.setArguments(null);
        // this is for the very first fragment not to be added into the back stack.
        if (popBackStack) {
            fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        } else {
            ft.addToBackStack(parentFragment.getClass().getName() + "");
        }
        ft.replace(R.id.contenedor_principal, parentFragment, tag);
        ft.commit();
        fm.executePendingTransactions();
    }

같은 사용한다.

Fragment f = new YourFragment();
replaceFragment(f, null, boolean true, true); 

Public void replaceFragment(Fragment mFragment, int id, String tag, boolean addToStack) {
        FragmentTransaction mTransaction = getSupportFragmentManager().beginTransaction();
        mTransaction.replace(id, mFragment);
        hideKeyboard();
        if (addToStack) {
            mTransaction.addToBackStack(tag);
        }
        mTransaction.commitAllowingStateLoss();
    }
replaceFragment(new Splash_Fragment(), R.id.container, null, false);

Vishal Yadav
Machavity
그는 2년 전 댓글을 달았습니다
1

이 코드는 스니핏 제한적으로 이용할 수 있는, 즉각적인 도움을 주셔서 감사합니다. [이벤트수정적절한 설명이 크게 개선될 것이라고 장기적 가치] (//meta.stackexchange.com/q/ 114762/206345) 표시되어 있는 이 좋은 인프라일까요 why 더 유용한 해결책을 함께 향후 판독기에서 다른 비슷한 질문을 할 것입니다. [편집] desktopplatforms 해명, 가정 등 일부 추가하여 you& # 39, ve 대답을 했다.

조각은 다음과 같은 코드를 사용하여 교체.

Fragment fragment = new AddPaymentFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.frame, fragment, "Tag_AddPayment")
                .addToBackStack("Tag_AddPayment")
                .commit();

39 의 activity& 옹박프레스트 () 는:

  @Override
public void onBackPressed() {
    android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
    if (fm.getBackStackEntryCount() > 1) {

        fm.popBackStack();
    } else {

        finish();

    }
    Log.e("popping BACKSTRACK===> ",""+fm.getBackStackEntryCount());

}

&gt. 최초로 : 그냥 추가 방법을 사용할 수 있는 방법을 대신 교체 후 세콘드프라그먼트 아다토백스타크 방법을 통해 스택할 프레이크망트란스카션 클래스용 추가해야 합니다

&gt. 켜짐이 ss+sp 뒤로를 팝백스타키메드리아티 () 을 호출할 수 있습니다.

Fragment sourceFragment = new SourceFragment ();
final Fragment secondFragment = new SecondFragment();
final FragmentTransaction ft = getChildFragmentManager().beginTransaction();
ft.add(R.id.child_fragment_container, secondFragment );
ft.hide(sourceFragment );
ft.addToBackStack(NewsShow.class.getName());
ft.commit();

((SecondFragment)secondFragment).backFragmentInstanceClick = new SecondFragment.backFragmentNewsResult()
{
        @Override
        public void backFragmentNewsResult()
        {                                    
            getChildFragmentManager().popBackStackImmediate();                                
        }
};

하지만 난 내 문제가 유사물 유지하지 않고 나를 극복했다 조각이 남아 있다. F1 과 F2 는 2 절을 활동에 있다고 가정해 봅시다. F1 시작됨인 xam 수 있으며 일부 사용자 정보 다음 몇 가지 조건을 묻는 말 map_layer 빛위에 F2 의 사용자 입력) - 추가 속성용 나오면 그 전화 번호. 다음에는 전화 번호를 모두 활용할 수 있는 아이돌 스맥랜드의 뒤로를 F1 과 확장하지만 가입 완료하십시오 이전 사용자 정보 실주했습니다 진실이며당신이 don& # 39, 기존의 데이터를 없다. 이 부분은 /dev/rdsk/c0t0d0s4 처음부터 이 정보를 저장한 '의' 설사 'null' 요나스티비티크리스트 온사베인스턴스국가 번들화 돌아왔습니다.

  • Solution:* 필요한 정보를 저장 표시됨과 인스턴스 변수로 호출하십시오 활동까지입니다. 인스턴스 변수 를 돌고 있는 전달하는 것입니다.

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Bundle args = getArguments();

    // this will be null the first time F1 is created. 
    // it will be populated once you replace fragment and provide bundle data
    if (args != null) {
        if (args.get("your_info") != null) {
            // do what you want with restored information
        }
    }
}

그래서 내 에서 다음과 같은 예를 들면 다음과 같다: 전 제가 사용하는 사용자 데이터를 저장할 수 있는 디스플레이 F2 인스턴스 변수 콜백하는. 그럼 내가 전화 번호 및 저장 누르면 시작 F2, 사용자 채웁니다. 내가 사용하는 다른 활동을, F1, 이번에는 내 조각 및 교체 수집하십시오 콜백하는 이 정보를 가지고 있는 데이터 번들에는 사용할 수 있습니다.

@Override
public void onPhoneAdded(String phone) {
        //replace fragment
        F1 f1 = new F1 ();
        Bundle args = new Bundle();
        yourInfo.setPhone(phone);
        args.putSerializable("you_info", yourInfo);
        f1.setArguments(args);

        getFragmentManager().beginTransaction()
                .replace(R.id.fragmentContainer, f1).addToBackStack(null).commit();

    }
}

자세한 내용은 콜백 여기에서 찾을 수 있습니다. https://developer.android.com/training/basics/fragments/communicating.html

getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener()
    {
        @Override
        public void onBackStackChanged()
        {
            if (getSupportFragmentManager().getBackStackEntryCount() == 0)
            {
                //setToolbarTitle("Main Activity");
            }
            else
            {
                Log.e("fragment_replace11111", "replace");
            }
        }
    });

YourActivity.java
@Override
public void onBackPressed()
{
 Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.Fragment_content);
  if (fragment instanceof YourFragmentName)
    {
        fragmentReplace(new HomeFragment(),"Home Fragment");
        txt_toolbar_title.setText("Your Fragment");
    }
  else{
     super.onBackPressed();
   }
 }

public void fragmentReplace(Fragment fragment, String fragment_name)
{
    try
    {
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.Fragment_content, fragment, fragment_name);
        fragmentTransaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left, R.anim.enter_from_left, R.anim.exit_to_right);
        fragmentTransaction.addToBackStack(fragment_name);
        fragmentTransaction.commitAllowingStateLoss();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

여기서 '에서' 에 추가할 때 박스타크 조각 조각 이후 온사베인스턴스국가 호츨 않습니다. '와' 끝 '시작' 에서 조각이 수명주기의 박스타크 리스토어된 때 언크리티비우 오네스트로이비에프 온사베인스턴스국가 '간' 동시에 '호출됨 오네스트로이비에프' 와 '오네스트로이'. 내 만들기 '에서' 인스턴스 변수 초기화 및 솔루션은 언크리치. 샘플 코드:

private boolean isDataLoading = true;
private ArrayList<String> listData;
public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     isDataLoading = false;
     // init list at once when create fragment
     listData = new ArrayList();
}
그리고 다시 체크인될 '요나스티비티크리스트':

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    if(isDataLoading){
         fetchData();
    }else{
         //get saved instance variable listData()
    }
}

private void fetchData(){
     // do fetch data into listData
}