我是android的新手,我想知道为什么不推荐这种简单的参数传递方法。
class DemoFragment extends Fragment{
private MyObject myObject;
public void setMyObject(MyObject myObject){
this.myObject = myObject;
}
}
DemoFragment fragmentDemo = new DemoFragment();
fragmentDemo.setMyObject(myObject);
答案 0 :(得分:4)
为什么使用Bundles而不是简单的setter?
当您旋转设备的屏幕时(a.k.a。"方向更改"或"配置更改"),片段DemoFragment
将被销毁,然后由android重新创建。因此,如果通过setter提供,DemoFragment.myObject
的内容将在旋转后丢失。
非直观的"捆绑"屏幕旋转后,信息不丢失。重新创建DemoFragment时,它会再次从捆绑中接收数据,以便再次使用所需参数填充DemoFragment.myObject
。
有关详细信息,请参阅https://developer.android.com/training/basics/activity-lifecycle/index.html
如果一个班级成员在"屏幕旋转"之后丢失并不重要。塞特人很好。
答案 1 :(得分:2)
Android为参数传递给Fragments提供的机制是使用Bundles,这与Activity to Activity数据传递中的技术相同。
创建片段时,使用所需的键值调用其setArguments(Bundle bundle)
方法。
另一个优点是您可以在设备更改配置期间保留此参数,例如方向更改。
使用getter和setter通常不是一种坏习惯,但在尝试重新发明轮子之前,最好从本机API中获取最大的效果。