在android中正确使用片段

时间:2014-04-13 12:10:32

标签: android android-fragments android-fragmentactivity fragmenttransaction

我确信这个问题已被多次询问,但没有找到任何有用的答案。

我正在尝试实现Fragment,它可以在我的应用程序中使用X次(是的是..甚至100以上......)

我只想创建我的片段一次,而在其他时候传递bundle并让生命周期完成他需要对bundle数据做的事情。 到现在为止还挺好?所以我发现谷歌文​​件是一个很好的实现:

public static class MyFragment extends Fragment {

public MyFragment() { }  // Required empty constructor

public static MyFragment newInstance(String foo, int bar) {
MyFragment f = new MyFragment();
Bundle args = new Bundle();
args.putString(ARG_FOO, foo);
args.putInt(ARG_BAR, bar);
f.setArguments(args);
return f;
}

然后您可以在以后访问此数据:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
if (args != null) {
// Use initialisation data
}
}

那么这里有什么问题?首先,片段必须是一个内部类。其次,如果类是静态的,并且函数newInstance(...)是静态的,为什么它们总是创建新实例而不检查(通过保留片段的静态成员)如果它不像 Singleton那样为null

假设我的片段会多次添加到我的片段管理器中,我可以将片段类用作完整的Singleton 吗?这意味着每次我打电话:

public class MyFragment extends Fragment {

private static MyFragment sInstance;

public MyFragment() { }  // Required empty constructor

public static MyFragment newInstance(String foo, int bar) {
if (sInstance==null) {
  sInstance = new MyFragment();
}
Bundle args = new Bundle();
args.putString(ARG_FOO, foo);
args.putInt(ARG_BAR, bar);
f.setArguments(args);
return f;
}

}

使用new / exist片段进行交易。

希望我能说清楚,并且没有在这里写一些废话:)

非常感谢你的帮助

0 个答案:

没有答案