0
그래서 내가 좋아하는 중첩 된 조각이 알 수없는 이유로으로 널됩니다 :조각 클래스 필드는
public class AbstractFragment extends Fragment {
public int resultCode;
protected void startFragment(AbstractFragment fragment, int resultCode){
this.resultCode = resultCode;
Log.w(this, "startFragment(). fragment: "+fragment+" resultCode: "+this.resultCode);
((MainActivity)getActivity()).addFragmentToBackStack(fragment);
}
}
을하고 MainActivity는 대응하는 방법이 있습니다
public class DynamicsFragment extends AbstractFragment{
public static final int DYNAMICS_CODE = 2;
...
startFragment(new DynamicsAddFragment(), DYNAMICS_CODE);
...
}
처럼 시작되고
public class MainActivity extends FragmentActivity {
public void addFragmentToBackStack(Fragment fragment){
Log.w(this, "addFragmentToBackStack(). fragment: "+fragment+" resultCode: "+((AbstractFragment) fragment).resultCode);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, fragment, fragment.getClass().getName())
.addToBackStack(null)
.commit();
}
}
및 조각
내가 결과로 얻은 것은 완전히 나를 혼란스럽게 만든다. OOP의 기본 요소가 여기에서 작동하지 않는다. 딩은 로그에 :
03-05 21:35:05.700: W/DynamicsFragment(8533): startFragment(). fragment: DynamicsAddFragment{413453d8} requestCode: 2
03-05 21:35:05.700: W/MainActivity(8533): addFragmentToBackStack(). fragment: DynamicsAddFragment{413453d8} requestCode: 0
은 내가 잠재적 0-
resultCode
를 설정할 수 있지만, 아무도이없는 일부 코드를 찾을 것으로 예상 전체 프로젝트를 확인했습니다.
resultCode
이 설정되는 유일한 장소는
startFragment
방법이
AbstractFragment
이고, 과정이
DynamicsAddFragment
은
AbstractFragment
입니다. 또한 새 인스턴스
DynamicsAddFragment
이 생성되었지만 프로젝트에 해당 코드가없는 경우
resultCode
은 0으로 설정됩니다.
두 개의 로그 출력 행이 하나씩 실행되고 예상대로 실행됩니다. 그러나 ATM
startFragment
은 resultCode 필드가 2로 초기화되고 MainActivity 메소드가 실행될 때 동시에 필드가 비어 있습니다. 예를 들어 String 유형과 같은 다른 필드에서도 마찬가지입니다. 그러나 인스턴스화 된 FOA는 OBJECT! 그리고 당신이 볼 수 있듯이 객체의 런타임 Id (고유 한 런타임 해시 메모리 ID {413453d8})는 동일합니다! 그래서 그것의 defenitely 동일한 개체! 새로운 객체가 아니라 동일한 객체의 다른 인스턴스입니다! 어떻게 그럴수있어?!