所以我有一個嵌套的片段,如:片段類字段被清零由於未知原因,
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 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();
}
}
和片段正在開始像
public class DynamicsFragment extends AbstractFragment{
public static final int DYNAMICS_CODE = 2;
...
startFragment(new DynamicsAddFragment(), DYNAMICS_CODE);
...
}
我得到的結果是讓我感到困惑,因爲OOP的基本原理在這裏不起作用accor丁登錄:
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
我檢查了整個項目希望找到一些代碼,我可能會設置resultCode
0卻是沒有。 resultCode
正在設置的唯一位置是startFragment
方法AbstractFragment
和課程DynamicsAddFragment
延伸AbstractFragment
。如果創建了DynamicsAddFragment
的新實例,但項目中沒有這樣的代碼,那麼resultCode
將被設置爲零。
兩個日誌輸出行都會執行一個,後面跟着一個。但ATM startFragment
運行resultCode字段初始化爲2並且MainActivity方法運行字段的同時已經爲空。例如,像String類型的其他字段也是如此。但是實例化的片段FOA是一個對象!而且你可以看到對象的運行時Id(唯一的運行時哈希內存ID {413453d8})是相同的!所以它有同樣的對象!它不是同一個對象的新/另一個實例!怎麼會這樣?!