내 Activity
내에서 FragmentTransaction
을 시작하고 Argument
을 Fragment
으로 설정합니다. 내 onCreateView()
메서드 내에서 디버깅하고 같이 즉시onCreateView의 단편화 된 인수
Product product;
@Override
public void setArguments(Bundle args) {
super.setArguments(args);
product = (Product) args.getSerializable(Constants.KEY_PRODUCT);
}
이 모든 잘 작동하지만, 내 Fragment
의 클래스 내에서
DetailFragment detailFragment = new DetailFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(Constants.KEY_PRODUCT, navigate.product);
detailFragment.setArguments(bundle);
나는 setArgument 방법을 무시하고 Serializable
개체를 구문 분석 이전에 설정된 제품은 null
입니다. 누군가 나에게 이것을 설명 할 수 있습니까? 그리고 이것을하기위한 올바른 접근 방법은 무엇입니까? Activity
에서 :
DetailFragment detailFragment = DetailFragment.newInstance(navigate.product);
그리고 조각의 :
public static DetailFragment newInstance(Product product) {
DetailFragment fragment = new DetailFragment();
Bundle args = new Bundle();
args.putSerializable(Constants.KEY_PRODUCT, product);
fragment.setArguments(args);
return fragment;
}
의 I는 다음 코드 조각 결국 마이클 의해 답변을 다음
:
편집
내에서 getArgument()
에 액세스하려고 시도하면
if (getArguments() != null) {
product = (Product) getArguments().getSerializable(Constants.KEY_PRODUCT);
}
및 Product
나의 설정되지 않습니다 : t은 null
을 줄 것이다. 나는 다른 것을 놓쳤는가?
'product'는'setArguments()'에서 초기화 될 때'null' 출력되는 이유는 무엇입니까? – azizbekian
@azizbekian'Fragment'가'FragmentManager'에 아직 추가되지 않았기 때문에'null'되었습니다.'FragmentManager'는 상태를 가진 조각을 죽이고 다시 생성 할 수 있습니다. 생성자 (이 경우'setArguments()'에서'product'를 설정하는 것은 생성자를 사용하는 것과 다르지 않지만'Bundle' 내에'getArguments()'가 리턴하는'product'를 여전히 가질 것입니다. – Kostyantin2216
@ Kostyantin2216, get/set 인수의 요점을 얻습니다. 내가 대답 할 수없는 질문은 그 조각이 아직 시스템에 의해 파괴되지 않았기 때문에 그 조각이 "없어져 버린"이유입니다. 이것이 시나리오라면, 시스템이 프로세스를 죽이고 사용자가 다시 탐색 할 때 'product' 필드는 null이어야하지만, 그렇지 않으면 (번들에서도) 어떻게'번들 '이' 널 밖으로 나가. – azizbekian