为什么不推荐使用简单的getter setter将对象传递给片段

时间:2016-06-30 17:33:47

标签: java android android-fragments

我是android的新手,我想知道为什么不推荐这种简单的参数传递方法。

class DemoFragment extends Fragment{
    private MyObject myObject;
    public void setMyObject(MyObject myObject){
        this.myObject = myObject;
    }
}

DemoFragment fragmentDemo = new DemoFragment();
fragmentDemo.setMyObject(myObject);

2 个答案:

答案 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中获取最大的效果。