所以我有一个嵌套的片段,如:片段类字段被清零由于未知原因,
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})是相同的!所以它有同样的对象!它不是同一个对象的新/另一个实例!怎么会这样?!