我确信这个问题已被多次询问,但没有找到任何有用的答案。
我正在尝试实现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片段进行交易。
希望我能说清楚,并且没有在这里写一些废话:)
非常感谢你的帮助