什么是setArguments点?

您好我正在看Android的网站上的以下片段的例子。

http://developer.android.com/guide/components/fragments.html#Example

我想知道为什么某些方法被执行。

为什么detailsFragment例子,在detailsFragment是执行下面的方法:

 public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } 

你不能也简单地实例化DetailsFragment并使用setter方法来设置index 。 绕过整个setArguments

首先使用setArguments什么意义? 你能不能只使用setters和getters?

你可以使用getter和setter,但是通过传入一个bundle,你不需要编写这个代码,因为它已经在那里了。 另外,我相信如果屏幕方向改变,这些参数会自动传入,这也使得生活更轻松。

实质上,setArguments和getArguments只是Googlebuild议您遵循的devise模式:

每个片段必须有一个空的构造函数,所以在恢复其活动状态时,它可以被实例化。 强烈build议子类没有带参数的其他构造函数,因为这些构造函数在重新实例化时不会被调用。 相反,调用者可以用setArguments(Bundle)提供参数,然后用getArguments()方法检索片段。 http://developer.android.com/reference/android/app/Fragment.html

我把它包括在你的Fragment中也需要使用的setters。 再说一遍 – 没有什么事情可以迫使你这样做,而且正如你所知道的那样 – 并不是唯一的办法。

只要加上Matthew的回答:他正确地引用了Fragments需要一个空的构造函数,以便框架可以在需要的时候重新实例化它们。

使用getter和setter是很好的,但是由于框架可能会破坏并重新创build你的Fragment,所以你必须确保不会丢失这些参数。

这必须通过Fragment.onSaveInstanceState() 。 保存的声明将作为参数savedInstanceStateFragment.onCreate()Fragment.onCreateView()和其他几个方法中传回给你。

使用Fragment.setArguments() (在大多数情况下,我假设)更容易,在框架将自动保留的参数,从而将为你做大部分的工作。

Setter可能是最初提供给Fragment的参数的方法,而且片段可能会随着时间的推移而自行调整。 在这种情况下单独处理savedInstanceState可能比处理savedInstanceState和参数更容易 – 必须在此处作出有效参数的决定。

 public void setArguments (Bundle args) 

提供这个片段的构造参数。 这只能在片段附加到其活动之前调用; 也就是说,你应该在构造片段之后立即调用它。 这里提供的参数将保留在片段销毁和创build (可能是以前的官方文档中缺less的粗体文本)

Fragments.setArguments(Bundle args)

另外setter可能被滥用。 如果updateSomeOtherStuff()会改变一些视图,将会崩溃。

 public class MyFragment extends Fragment { void setData(someData){ this.someData = someData; updateSomeOtherStuff() } } 

如果传递一个包,就不可能误用这个setter,而且你总是会知道这将在生命周期方法中被设置。